首页 > 其他分享 >11.迷宫问题(BFS 储存路径)

11.迷宫问题(BFS 储存路径)

时间:2023-05-02 19:00:19浏览次数:59  
标签:11 右下角 int 路径 迷宫 st BFS 左上角

迷宫问题

↑ 题目链接

题目

给定一个 \(n×n\) 的二维数组,如下所示:

int maze[5][5] = {

0, 1, 0, 0, 0,

0, 1, 0, 1, 0,

0, 0, 0, 0, 0,

0, 1, 1, 1, 0,

0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

数据保证至少存在一条从左上角走到右下角的路径。

输入格式

第一行包含整数 \(n\)。接下来 \(n\) 行,每行包含 \(n\) 个整数 \(0\) 或 \(1\),表示迷宫。

输出格式

输出从左上角到右下角的最短路线,如果答案不唯一,输出任意一条路径均可。
按顺序,每行输出一个路径中经过的单元格的坐标,左上角坐标为 \((0,0)\) ,右下角坐标为 \((n−1,n−1)\)

数据范围

$ 0≤n≤1000$

输入样例:

5
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

输出样例:

0 0
1 0
2 0
2 1
2 2
2 3
2 4
3 4
4 4

思路

从终点往起点 \(BFS\) 搜索,第一次到达时保存路径,最后输出

代码

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int>PII;
const int N=1010;
int g[N][N];
bool st[N][N];
PII pre[N][N];
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
int n;

void bfs()
{
	queue<PII>q;
	q.push({n-1,n-1});
	st[n-1][n-1]=true;
	while(q.size())
	{
		auto t=q.front();
		q.pop();
		
		for(int i=0;i<4;i++)
		{
			int a=t.x+dx[i],b=t.y+dy[i];
			if(a<0||a>=n||b<0||b>=n||st[a][b]||g[a][b]==1)continue;
			pre[a][b]={t.x,t.y};//保存路径
			
			st[a][b]=true;
			q.push({a,b});
		}
	}
}

int main()
{
	cin>>n;
	
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			cin>>g[i][j];
	
	
	bfs();
	
	int x=0,y=0;
	
	while(1)
	{
	    cout<<x<<' '<<y<<endl;
	    if(x==n-1&&y==n-1)break;
	    int nowx=x,nowy=y;
		x=pre[nowx][nowy].x,y=pre[nowx][nowy].y;
	}
	
	
	return 0;
}

标签:11,右下角,int,路径,迷宫,st,BFS,左上角
From: https://www.cnblogs.com/zzmxj/p/17367584.html

相关文章

  • 13.非常可乐(简单搜索 BFS)
    非常可乐题目大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是\(N\)毫升和\(M\)毫升。可......
  • AtCoder Regular Contest 119 F AtCoder Express 3
    洛谷传送门AtCoder传送门很厉害的题!考虑所有车站已确定,如何求\(0\)到\(n+1\)的最短路。设\(g_{i,0}\)为只考虑\(0\simi\)的点,到\(i\)和它左边第一个\(\text{A}\)的最短路,\(g_{i,1}\)同理。有转移:若\(s_{i-1}=\text{A},s_i=\text{A},g_{i,0}\getsg_{......
  • 第11讲 AXI_FULL自定义总线详解
    DDR3 IP基础知识  (1条消息)快速上手XilinxDDR3IP核----汇总篇(MIG)_ddr3xilinx_孤独的单刀的博客-CSDN博客DDR3_MIG_TB   moduletop(  output    [31:0]   c);localparam[15:0]  a=65535;localparam[15:0]  b=25687;assignc=a*......
  • C语言数据结构---迷宫问题(栈)
    #include<stdio.h>#include<stdlib.h>#defineMAXSIZE20#defineM4#defineN4/*迷宫---外围加上一圈1起点--0011 0000 0111 0000--出口*///此迷宫按照优先向右下方向移动的标准!!!!//要用链表形式的栈存放坐标+方向typedefstruct{ //存放坐标x,y接下来......
  • 11 ETH-反思
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click11ETH-反思目录11ETH-反思Issmartcontractreallysmart?只是代码合同。smartcontractisanythingbutsmart.不可篡改性,其实是一个双刃剑......
  • 23.5.2 NOIP2011 Day1提高游记
    今天做的比较得愉快快呢,除了第三题hh1.铺地毯这题我不做太多评价,纯纯的一道大水题。注意遍历数据的时候倒着遍历,还有就是不能用二维数组,会MLE。code:1#include<bits/stdc++.h>2#defineN100053usingnamespacestd;4inta[N],b[N],g[N],k[N];5inlinelongl......
  • CF911F Tree Destruction
    题意:给你一棵\(n\)个结点组成的树,你需要对树进行\(n-1\)次操作,一次操作包含如下的步骤:选择两个叶子结点将这两个结点之间简单路径的长度加到答案中从树上删去两个叶子结点之一初始答案为\(0\),显然在\(n-1\)次操作之后树上只剩下一个结点。计算最大的答案,并构造一组......
  • Win11卸载“连接手机”UWP应用
    孽缘起因Win11提示可以联机手机,在电脑上能读取到手机上的通知,短信,通话等,也是闲着无事,就安装了试了试,发现其实没有MIUI+好用,就另外装上之后电脑玩游戏时CPU占用规律性的100%,我怀疑有bug,就准备卸载。结果呢?呵!好家伙,这鬼东西不让卸载!流氓行径!微软你学啥不好学这玩意,你这......卸......
  • AtCoder Regular Contest 119 D Grid Repainting 3
    洛谷传送门AtCoder传送门对每个红格的行和列连边,建出二分图。对于二分图中的每个连通块分别考虑。大胆猜测对于每个连通块,我们都能够进行适当的操作,使得只有一行/一列没被操作(显然不能使所有行和列都被操作)。对应的方案就是随便取一棵生成树,把不被染白的那一行/列拎出来当根,然......
  • 11 BTC-匿名性
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click11BTC-匿名性目录11BTC-匿名性Bitcoinandanonimity比特币是匿名的吗?一般我们认为,匿名与privacy联系起来的。比特币中不要求使用真名,可以使用公钥......