A0522 走迷宫(求步数)

题目描述

给定一个 R×C 的迷宫,其中的障碍不能走,空地可以走。

给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。

只能在水平方向或垂直方向走,不能斜着走。

输入格式

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

接下来是 R行,每行 C 个字符,代表整个迷宫。

空地格子用 . 表示,有障碍物的格子用 # 表示。

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

输出格式

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

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

样例 #1

样例输入 #1

5 5
..###
#....
#.#.#
#.#.#
#.#..

样例输出 #1

9

#include 
using namespace std;
struct nn{
	int x,y,s;
};
nn t,c;
int n,m,v[101][101];
char a[101][101];
const int dx[4]={0,1,0,-1};
const int dy[4]={1,0,-1,0};
queue q;
void ddd(int x,int y){
	t.x=x;
	t.y=y;
	t.s=1;
	q.push(t);
	while(!q.empty()){
		c=q.front();
		if(c.x==n&&c.y==m){
			cout<n||ny<1||ny>m) continue;
			if(a[nx][ny]!='#'&&!v[nx][ny]){
				v[nx][ny]=1;
				t.x=nx;
				t.y=ny;
				t.s=c.s+1;
				q.push(t);
			}
		}
		q.pop();
	}
}
int main(){
	cin>>n>>m;
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++){
			cin>>a[i][j];
		}
	}
	v[1][1]=1;
	ddd(1,1);
	return 0;
}

你可能感兴趣的:(算法)