听灌多
  • 板块灌水区
  • 楼主Oier_point
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/8 14:48
  • 上次更新2024/8/8 15:41:48
查看原帖
听灌多
1276389
Oier_point楼主2024/8/8 14:48

大佬能帮忙看看代码有什么问题吗? 有一个 R 行 C 列的迷宫,共含 R×C 个格子,每个格子中为 字符 . 或 字符 # ,分别表示 通道、墙。迷宫入口为第 1 行第 1 列的格子,出口为第 R 行第 C 列的格子。

求:从入口走到出口,至少需走多少个格子(包括入口格子、出口格子)?若无法走到出口,则输出 −1 。

注:每一步只能走到相邻4个方向(上、下、左、右)的格子上。

输入描述

第一行,包含两个整数 R 和 C

接下来 R 行,每行包含 C 个字符( 这些字符只可能是 . 或 # )

【测试数据范围】1≤R,C≤5

输出描述

输出一行,包含一个整数,代表至少需要走多少个格子。若无法走到出口,则输出 −1

#include<iostream>
using namespace std; 
struct migong 
{
	int bs=999;
	int zuxianx,zuxiany;
}q[10][10];
char s[6][6];
void bfs(int x,int y)
{
	if (s[x-1][y]!='#') 
	{
		if (q[x-1][y].bs-1>q[x][y].bs)
		{
			q[x-1][y].bs=q[x][y].bs+1;
			q[x-1][y].zuxianx=x;
			q[x-1][y].zuxiany=y;
		}
	}
	else if (s[x+1][y]!='#') 
	{
		if (q[x+1][y].bs-1>q[x][y].bs)
		{
			q[x+1][y].bs=q[x][y].bs+1;
			q[x+1][y].zuxianx=x;
			q[x+1][y].zuxiany=y;
		}
	}
	else if (s[x][y-1]!='#') 
	{
		if (q[x][y-1].bs-1>q[x][y].bs)
		{
			q[x][y-1].bs=q[x][y].bs+1;
			q[x][y-1].zuxianx=x;
			q[x][y-1].zuxiany=y;
		}
	}
	else if (s[x][y+1]!='#') 
	{
		if (q[x][y+1].bs-1>q[x][y].bs)
		{
			q[x][y+1].bs=q[x][y].bs+1;
			q[x][y+1].zuxianx=x;
			q[x][y+1].zuxiany=y;
		}
	}
}
int main()
{
	q[1][1].bs=1;
	q[1][1].zuxianx=0;
	q[1][1].zuxiany=0;
	int n,m,x,y;
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=m;j++)
		{
			cin>>s[i][j];
		}
	}
	bfs(1,1);
	if (q[x][y].bs==999) cout<<-1;
	else cout<<q[x][y].bs;
	return 0;
}
2024/8/8 14:48
加载中...