标签:
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6673 Accepted Submission(s): 2219
4 4 Y.#@ .... .#.. @..M 4 4 Y.#@ .... .#.. @#.M 5 5 Y..@. .#... .#... @..M. #...#
1 #include <iostream> 2 #include <queue> 3 #include <string.h> 4 using namespace std; 5 char a[201][201]; 6 int step[201][201]; 7 int m1[201][201]; 8 int m2[201][201]; 9 bool isw[201][201]; 10 int dx[4] = {0,1,0,-1}; 11 int dy[4] = {1,0,-1,0}; 12 int n,m; 13 int ycurx,ycury; 14 int mcurx,mcury; 15 struct NODE{ 16 int x; 17 int y; 18 }; 19 int Min(int a,int b) 20 { 21 return a<b?a:b; 22 } 23 bool judge(int x,int y) 24 { 25 if( x<1 || y<1 || x>n || y>m ) //越界 26 return 1; 27 if( isw[x][y] ) //走过了 28 return 1; 29 if( a[x][y]==‘#‘ ) //碰到墙 30 return 1; 31 return 0; 32 } 33 void bfs(int curx,int cury) 34 { 35 queue <NODE> q; //创建队列 36 NODE cur,next; 37 cur.x = curx; 38 cur.y = cury; 39 q.push(cur); //入队 40 memset(isw,0,sizeof(isw)); 41 isw[curx][cury] = true; 42 step[curx][cury] = 0; 43 while(!q.empty()){ 44 cur = q.front(); 45 q.pop(); 46 for(int i=0;i<4;i++){ 47 int nx = cur.x + dx[i]; 48 int ny = cur.y + dy[i]; 49 if( judge(nx,ny) ) 50 continue; 51 step[nx][ny] = step[cur.x][cur.y] + 1; //记录走到下一步的步数 52 isw[nx][ny] = true; 53 next.x = nx; 54 next.y = ny; 55 q.push(next); 56 } 57 } 58 } 59 int main() 60 { 61 while(cin>>n>>m){ 62 for(int i=1;i<=n;i++) 63 for(int j=1;j<=m;j++){ 64 cin>>a[i][j]; 65 if(a[i][j]==‘Y‘){ //记录Y的位置 66 ycurx=i; 67 ycury=j; 68 } 69 else if(a[i][j]==‘M‘){ //记录M的位置 70 mcurx=i; 71 mcury=j; 72 } 73 } 74 int tmin = 999999999; 75 bfs(ycurx,ycury); //以(ycurx,ycury)为起点开始广度优先搜索 76 for(int i=1;i<=n;i++) 77 for(int j=1;j<=m;j++){ 78 m1[i][j]=step[i][j]; 79 } 80 bfs(mcurx,mcury); //以(mcurx,mcury)为起点开始广搜优先搜索 81 for(int i=1;i<=n;i++) 82 for(int j=1;j<=m;j++){ 83 m2[i][j]=step[i][j]; 84 } 85 for(int i=1;i<=n;i++) //遍历出最短的总步数 86 for(int j=1;j<=m;j++){ 87 step[i][j]=m1[i][j] + m2[i][j]; 88 if(a[i][j]==‘@‘){ 89 tmin = Min(tmin,step[i][j]); 90 } 91 } 92 cout<<tmin*11<<endl; //输出最短总时间 93 } 94 return 0; 95 }
标签:
原文地址:http://www.cnblogs.com/pshw/p/4757162.html