1252:走迷宫时间限制: 1000 ms 内存限制: 65536 KB 提交数: 3548 通过数: 1520 【题目描述】一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。 【输入】第一行是两个整数,R和C,代表迷宫的长和宽。( 1≤ R,C ≤ 40) 接下来是R行,每行C个字符,代表整个迷宫。 空地格子用‘.’表示,有障碍物的格子用‘#’表示。 迷宫左上角和右下角都是‘.’。
【输出】输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。 【输入样例】
【输出样例】
【来源】 |
思路:
1.dfs,结果超时 30分
1 #include<iostream> //30分代码
2 #include<cstdio>
3 using namespace std;
4 int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
5 int n,m,sx,sy,ex,ey,minn=9999999;char a[500][500];
6 bool book[500][500];
7 int i,j;
8 void dfs(int x,int y,int step)
9 {
10 int nx,ny,k;
11 if(x==n&&y==m)
12 {
13 if(step<minn)
14 minn=step;
15 return;
16 }
17 for(k=0;k<=3;k++)
18 {
19 nx=x+next[k][0];
20 ny=y+next[k][1];
21 if(nx<1||nx>n||ny<1||ny>m)
22 continue;
23 if(a[nx][ny]=='.'&&book[nx][ny]==0)
24 {
25 book[nx][ny]=1;
26 dfs(nx,ny,step+1);
27 book[nx][ny]=0;
28 }
29 }
30 return;
31 }
32 int main()
33 {
34 scanf("%d%d",&n,&m);
35 for(i=1;i<=n;i++)
36 for(j=1;j<=m;j++)
37 {
38 cin>>a[i][j];
39 }
40 book[sx][sy]=1;
41 dfs(1,1,0);
42 printf("%d",minn+1);
43 return 0;
44 }
2.dfs 100分
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 char s[50][50];
7 int n,m,ans,minn=999999;
8 int i,j;
9 struct node{
10 int x,y,step;
11 };
12 void bfs(int a,int b)
13 {
14 queue<node>q;int k;
15 s[0][0]='.';
16 node q1;
17 q1.x=a;
18 q1.y=b;
19 q1.step=0;
20 q.push(q1);
21 while(!q.empty())
22 {
23 node q2=q.front();
24 for(k=0;k<4;k++)
25 {
26 int xx=q2.x+next[k][0];
27 int yy=q2.y+next[k][1];
28 if(xx>=0&&xx<n&&yy>=0&&yy<m&&s[xx][yy]=='.')
29 {
30 s[xx][yy]='#';
31 node q3;
32 q3.x=xx;q3.y=yy;q3.step=(q2.step+1);
33 if(xx==n-1&&yy==m-1)
34 {
35 if(q3.step<minn)
36 minn=q3.step;
37 }
38 else
39 q.push(q3);
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 bfs(0,0);
51 printf("%d",minn+1); //注意加一
52 return 0;
53 }
来源:oschina
链接:https://my.oschina.net/u/4336279/blog/3569658