Maze Problem(求最短距离)BFS
题目链接:
http://openoj.awaysoft.com/JudgeOnline/problem.php?id=1107
不多说,求最短距离~BFS
1 #include<stdio.h> 2 #include<string.h> 3 char ma[110][110]; 4 int vis[110][110],dist[110][110],dx[4]={0,1,0,-1},dy[4]={-1,0,1,0}; 5 int m,n; 6 int q[110*110]; 7 void bfs(int x,int y) 8 { 9 memset(q,0,sizeof(q)); 10 memset(vis,0,sizeof(vis)); 11 memset(dist,0,sizeof(dist)); 12 vis[x][y]=1; 13 int u=x*n+y,front=0,rear=0; 14 q[rear++]=u; 15 while(front<rear) 16 { 17 u=q[front++]; 18 x=u/n;y=u%n; 19 int i; 20 for(i=0;i<4;i++) 21 { 22 int nx=x+dx[i],ny=y+dy[i]; 23 if(nx>=0&&nx<m&&ny>=0&&ny<n&&!vis[nx][ny]&&ma[nx][ny]!='#') 24 { 25 q[rear++]=nx*n+ny; 26 vis[nx][ny]=1; 27 dist[nx][ny]=dist[x][y]+1; 28 if(ma[nx][ny]=='E')return ; 29 } 30 } 31 } 32 } 33 int main() 34 { 35 int N; 36 scanf("%d",&N); 37 while(N--) 38 { 39 scanf("%d%d",&m,&n); 40 memset(ma,0,sizeof(ma)); 41 int i,x,y,xx,yy; 42 for(i=0;i<m;i++){ 43 scanf("%s",ma[i]); 44 int j,count=0; 45 for(j=0;count<2&&j<n;j++) 46 { 47 if(ma[i][j]=='S')x=i,y=j,count++; 48 if(ma[i][j]=='E')xx=i,yy=j,count++; 49 } 50 } 51 bfs(x,y); 52 printf("%d\n",dist[xx][yy]); 53 } 54 return 0; 55 }