Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define INF 1e9
  4. #define MAX_DIM 500
  5.  
  6. using namespace std;
  7.  
  8. typedef pair<int,int> ii;
  9.  
  10. int n, m, dr[] = {-1,0,1,0}, dc[] = {0,1,0,-1}, dist[MAX_DIM][MAX_DIM];
  11. char grid[MAX_DIM][MAX_DIM + 1];
  12.  
  13. int main() {
  14.     while(scanf("%d%d",&n,&m) != EOF){
  15.         for(int i = 0; i < n; i++) {
  16.             scanf("%s",grid[i]);
  17.         }
  18.         queue<ii> q;
  19.         fill(&dist[0][0],&dist[0][0] + sizeof(dist) / sizeof(dist[0][0]),INF);
  20.         dist[0][0] = 0;
  21.         q.push(ii(0,0));
  22.         while(!q.empty()) {
  23.             ii cur = q.front(); q.pop();
  24.            
  25.             // if goal state
  26.             if(cur == ii(n - 1,m - 1)) {
  27.                 break;
  28.             }
  29.            
  30.             /*
  31.             '0','1','2',..
  32.             */
  33.             int cur_val = (int)(grid[cur.first][cur.second] - '0');
  34.             for(int k = 0; k < 4; k++) {
  35.                 int new_row = cur.first + dr[k] * cur_val;
  36.                 int new_col = cur.second + dc[k] * cur_val;
  37.                 if(new_row >= 0 && new_row < n && new_col >= 0 && new_col < m &&
  38.                     dist[new_row][new_col] == INF) {
  39.                     dist[new_row][new_col] = dist[cur.first][cur.second] + 1;
  40.                     q.push(ii(new_row,new_col));
  41.                 }
  42.             }  
  43.         }
  44.         if(dist[n - 1][m - 1] == INF) {
  45.             printf("-1\n");
  46.         } else {
  47.             printf("%d\n",dist[n - 1][m - 1]);
  48.         }
  49.     }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement