1254:走出迷宫

别来无恙 提交于 2020-03-02 05:58:20

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 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!