Time Limit: 3000/1000 MS
(Java/Others) Memory Limit: 32768/32768 K
(Java/Others)
Total Submission(s): 3226 Accepted
Submission(s): 1045
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 }
Freecode : www.cnblogs.com/yym2013
原文:http://www.cnblogs.com/yym2013/p/3521099.html