【无标题】

1432 - 走出迷宫的最少步数

题目描述

一个迷宫由 R 行 C 列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。

给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。

输入

第一行是两个整数,R 和 C ,代表迷宫的行数和列数。( 1≤R,C≤40 )

接下来是 R 行,每行 C 个字符,代表整个迷宫。空地格子用 . 表示,有障碍物的格子用 # 表示。

迷宫左上角和右下角都是 . 。

输出

输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。

计算步数要包括起点和终点。

样例

输入

复制

5 5
..###
#....
#.#.#
#.#.#
#.#..
输出

复制

9

来源

深搜 递归 广搜

标签

深搜icon-default.png?t=N7T8https://oj.czos.cn/problem/index?tag=%E6%B7%B1%E6%90%9C 递归icon-default.png?t=N7T8https://oj.czos.cn/problem/index?tag=%E9%80%92%E5%BD%92 广搜icon-default.png?t=N7T8https://oj.czos.cn/problem/index?tag=%E5%B9%BF%E6%90%9C

#include
using namespace std;


int n,m,j,i;
char a[50][50];
int q[2500][4];
int fx[5]={0,0,1,0,-1};
int fy[5]={0,1,0,-1,0};
int tx,ty;
int head=1,tail=1;
int main()
{
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	q[1][1]=1;
	q[1][2]=1;
	q[1][3]=1;
	while(head<=tail)
	{
		for(i=1;i<=4;i++)
		{
			tx=q[head][1]+fx[i];
			ty=q[head][2]+fy[i];
			if(a[tx][ty]=='.')
			{
				a[tx][ty]='#';
				tail++;
				q[tail][1]=tx;
				q[tail][2]=ty;
				q[tail][3]=q[head][3]+1;
				if(tx==n&&ty==m)
				{
					cout<

 

你可能感兴趣的:(算法,数据结构)