1431. 迷宫的第一条出路【提高】题解

这题是关于回溯与打印的问题

但比较简单的一点是找到dfs的第一条出路后就直接打印

还是用双向队列存储打印,用特判判断输出

代码也不是很难

借鉴一下也看得懂

 下面是代码 希望能火 麻烦点个赞并收藏一下 给我一些继续发的信心

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
char a[25][25],b[25][25];
ll dx[]={0,-1,0,1},dy[]={-1,0,1,0};
struct node{
	ll x,y;
};
deque<node> s;
void p()
{
	cout<<"(1,1)";
	for(int i=1;i<s.size();i++)
	{
		cout<<"->("<<s[i].x<<","<<s[i].y<<")";
	}
	
}
void dfs(ll x,ll y)
{
	if(x==n&&y==n)
	{
		p();
		exit(0);
	}
	for(int i=0;i<4;i++)
	{
		ll di=x+dx[i],dj=y+dy[i];
		if(di>=1&&di<=n&&dj>=1&&dj<=n&&a[di][dj]=='0'&&b[di][dj]==0)
		{
			b[di][dj]=1;
			s.push_back({di,dj});
			dfs(di,dj);
			b[di][dj]=0;
			s.pop_back();
		}	
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];
	s.push_back({1,1});
	b[1][1]=1;
	dfs(1,1);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值