1254:走出迷宫
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 2605 通过数: 1202
【题目描述】
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。
【输入】
第一行是两个整数n和m(1≤n,m≤100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符‘.’表示空地,‘#’表示墙,‘S’表示起点,‘T’表示出口。
【输出】
输出从起点到出口最少需要走的步数。
【输入样例】
3 3 S#T .#. ...
【输出样例】
6
【来源】
这道题目用BFS做。
1 #include<cstdio>
2 #include<iostream>
3 #include<queue> //队列
4 using namespace std;
5 int next[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; //控制方向
6 int n,m,i,j,ex,ey,sx,sy,minn=999999;
7 char s[500][500]; //迷宫
8 struct node{
9 int x,y,stop;
10 };
11 int bfs(int a,int b)
12 {
13 queue<node>q;int k;
14 node q1;
15 q1.x=a;
16 q1.y=b;
17 q1.stop=0;
18 q.push(q1);
19 while(!q.empty())
20 {
21 node q2=q.front();
22 for(k=0;k<4;k++)
23 {
24 int xx=q2.x+next[k][0];
25 int yy=q2.y+next[k][1];
26 if(xx>=0&&xx<n&&yy>=0&&yy<m&&s[xx][yy]!='#')
27 {
28 node q3;s[xx][yy]='#';
29 q3.x=xx;q3.y=yy;q3.stop=q2.stop+1;
30 if(xx==ex&&yy==ey)
31 {
32 if(q3.stop<minn)
33 minn=q3.stop;
34 }
35 else
36 {
37
38 q.push(q3);
39 }
40 }
41 }
42 q.pop();
43 }
44 }
45 int main()
46 {
47 scanf("%d%d",&n,&m);
48 for(i=0;i<n;i++)
49 scanf("%s",s[i]);
50 for(i=0;i<n;i++)
51 for(j=0;j<m;j++)
52 {
53 if(s[i][j]=='S')
54 {
55 sx=i;sy=j;
56 s[i][j]=='.';
57 }
58 if(s[i][j]=='T')
59 {
60 ex=i;ey=j;
61 s[i][j]=='.';
62 }
63 }
64 bfs(sx,sy);
65 printf("%d",minn);
66 return 0;
67 }
来源:https://www.cnblogs.com/fuxiqi/p/10780289.html