【NOI】6264:走出迷宫/ 2.5基本算法之搜索

6264:走出迷宫

  • 查看
  • 提交
  • 统计
  • 提问

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。

输入

第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。

输出

输出从起点到出口最少需要走的步数。

样例输入

3 3
S#T
.#.
...

样例输出

6

 这道题跟仙岛求药差不多,还简单了,我一会儿就写好了代码,就不用解释了,你可以看一下我写的“宽搜练习——仙岛求药/【NOI】2.5基本算法之搜索 2727:仙岛求药”,我只不过改了一点点就对了:

#include
using namespace std;
int front,rear,r,c,dx[4]={0,1,0,-1},dy[4]={1,0,-1,0},q[10010][3],lx,ly,mx,my;
char a[110][110];
void bfs();
int main()
{
	cin>>r>>c;
	if(r==0&&c==0)
		return 0;
	for(int i=1;i<=r;i++)
		for(int j=1;j<=c;j++)
		{
			cin>>a[i][j];
			if(a[i][j]=='S')
				lx=i,ly=j;
			if(a[i][j]=='T')
				mx=i,my=j;
		}
	front=0,rear=1;
	q[rear][0]=lx,q[rear][1]=ly,q[rear][2]=0;
	a[lx][ly]=1;
	bfs();
	cout<=1&&xx<=r&&yy>=1&&yy<=c&&a[xx][yy]!='#')
			{
				rear++;
				q[rear][0]=xx;
				q[rear][1]=yy;
				q[rear][2]=q[front][2]+1;
				a[xx][yy]='#';
				if(xx==mx&&yy==my)
					return;
			}
		}
	}
}

 

你可能感兴趣的:(【NOI】6264:走出迷宫/ 2.5基本算法之搜索)