Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define INF 1e9
- #define MAX_DIM 500
- using namespace std;
- typedef pair<int,int> ii;
- int n, m, dr[] = {-1,0,1,0}, dc[] = {0,1,0,-1}, dist[MAX_DIM][MAX_DIM];
- char grid[MAX_DIM][MAX_DIM + 1];
- int main() {
- while(scanf("%d%d",&n,&m) != EOF){
- for(int i = 0; i < n; i++) {
- scanf("%s",grid[i]);
- }
- queue<ii> q;
- fill(&dist[0][0],&dist[0][0] + sizeof(dist) / sizeof(dist[0][0]),INF);
- dist[0][0] = 0;
- q.push(ii(0,0));
- while(!q.empty()) {
- ii cur = q.front(); q.pop();
- // if goal state
- if(cur == ii(n - 1,m - 1)) {
- break;
- }
- /*
- '0','1','2',..
- */
- int cur_val = (int)(grid[cur.first][cur.second] - '0');
- for(int k = 0; k < 4; k++) {
- int new_row = cur.first + dr[k] * cur_val;
- int new_col = cur.second + dc[k] * cur_val;
- if(new_row >= 0 && new_row < n && new_col >= 0 && new_col < m &&
- dist[new_row][new_col] == INF) {
- dist[new_row][new_col] = dist[cur.first][cur.second] + 1;
- q.push(ii(new_row,new_col));
- }
- }
- }
- if(dist[n - 1][m - 1] == INF) {
- printf("-1\n");
- } else {
- printf("%d\n",dist[n - 1][m - 1]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement