Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- using namespace std;
- bool visited[50][50];
- int dist[50][50];
- int xd[] = {-1,1,0,0};
- int yd[] = {0,0,1,-1};
- int main()
- {
- int n,m,startx, starty;
- cin>>n>>m;
- char mat[n][m][4];
- for(int i = 0 ; i < 4 ; ++i)
- {
- for(int j = 0 ; j < n ; ++j)
- {
- for(int k = 0 ; k < m ; ++k)
- {
- cin>>mat[j][k][i];
- dist[j][k] = 999999;
- }
- }
- }
- cin>>startx>>starty;
- dist[startx][starty] = 0;
- for(;;)
- {
- int sx = -1, sy = -1;
- for(int i = 0 ; i < n ; ++i)
- for(int j = 0 ; j < m ; ++j)
- if(!visited[i][j] && (sx == -1 || dist[sx][sy] > dist[i][j]))
- {
- sx = i;
- sy = j;
- }
- if(sx == -1)
- break;
- visited[sx][sy] = true;
- for(int i = 0 ; i < 4 ; ++i)
- {
- int xx = sx + xd[i];
- int yy = sy + yd[i];
- if(xx >= 0 && xx < n && yy >= 0 && yy < m && !visited[xx][yy] && mat[sx][sy][i] != 'x')
- dist[xx][yy] = min(dist[xx][yy], dist[sx][sy] + mat[sx][sy][i] - '0');
- }
- }
- int minDist = 999999;
- for(int i = 0 ; i < m ; ++i)
- if(mat[0][i][0] != 'x')
- minDist = min(minDist, dist[0][i] + mat[0][i][0] - '0');
- if(minDist == 999999)
- cout<<-1;
- else
- cout<<minDist;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement