外站广搜题
  • 板块题目总版
  • 楼主Hanrui_Hu
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/21 10:45
  • 上次更新2024/8/21 13:14:18
查看原帖
外站广搜题
783942
Hanrui_Hu楼主2024/8/21 10:45

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

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

输入格式 第一行是两个整数, R R 和 C C,代表迷宫的长和宽。 ( 1 ≤ R , C ≤ 40 ) (1≤R,C≤40)

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

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

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

输出格式 输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。

输入数据 1 5 5 ..### #.... #.#.# #.#.# #.#.. 输出数据 1 9 代码

//author Hu Huanrui Harry
//P0420
#include<bits/stdc++.h>
using namespace std;
int n,k,m;
char zz[50][50];
int vis[50][50];
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
struct point{
	int x;
	int y;
};
void bfs(int x,int y){
	queue<point>q;
	q.push({x,y});
	zz[x][y]='#'; 
	vis[1][1]=1;
	while(q.size()>0){
		point u=q.front();
		q.pop();
		if(u.x==n&&u.y==m){
			cout<<vis[n][m]<<endl;
			break;
		}for(int i=0;i<=3;i++){
			int xx=u.x+dx[i];
			int yy=u.y+dy[i];
			if(xx<=n&&xx>=1&&yy<=m&&yy>=1&&zz[xx][yy]=='.'){
				q.push({xx,yy});
				zz[xx][yy]='#';
				vis[xx][yy]=vis[u.x][u.y]+1;
			}
		}
	}
}int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>zz[n][m];
        }
    }bfs(1,1);
	return 0;
}```cpp
求助
2024/8/21 10:45
加载中...