1 #include <iostream> 2 #include <cstdio> 3 #include<queue> 4 #include<cstring> 5 #include <algorithm> 6 using namespace std; 7 int G[501][501]; 8 bool vis[501][501]; 9 int dx[4] = {-1,1,0,0}; 10 int dy[4] = {0,0,1,-1}; 11 typedef struct 12 { 13 int x,y,time; 14 }node; 15 void bfs(int m,int n) 16 { 17 node s; 18 s.x = 0; 19 s.y = 0; 20 s.time = 0; 21 queue<node> q; 22 q.push(s); 23 memset(vis,false,sizeof(vis)); 24 vis[0][0] = true; 25 while(!q.empty()) 26 { 27 node now = q.front(); q.pop(); 28 //printf("%d %d\n",now.x,now.y); 29 if(now.x == m-1 && now.y==n-1) { 30 printf("%d",now.time); 31 return; 32 } 33 for(int i=0;i<4;i++) 34 { 35 int nx = now.x + dx[i]*G[now.x][now.y]; 36 int ny = now.y + dy[i]*G[now.x][now.y]; 37 //printf("-%d %d\n",nx,ny); 38 if(nx<0||nx>=m||ny<0||ny>=n||vis[nx][ny]) continue; 39 node nn; 40 nn.x = nx; nn.y = ny; nn.time = now.time+1; 41 q.push(nn); 42 vis[nx][ny] = true; 43 } 44 } 45 printf("IMPOSSIBLE"); 46 } 47 48 int main() 49 { 50 int m,n;cin>>m>>n; 51 for(int i=0;i<m;i++) 52 { 53 string s; 54 cin>>s; 55 int len = s.length(); 56 for(int j=0;j<len;j++) 57 { 58 G[i][j] = s[j]-‘0‘; 59 } 60 } 61 //puts("here"); 62 bfs(m,n); 63 }
时间: 2024-10-26 18:39:21