数字接龙(dfs)(蓝桥杯)

非常好的联系dfs的一道题目!

推荐看这位大佬的详解------>大佬详细题解

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

const int N = 2e5 + 10,M=20;
int a[M][M];
bool val[M][M];
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
int n,k;
int path[M][M];
string ans;      //这时的数字  //答案字符  //总共经过数目
void dfs(int x,int y,int url,string s,int num)
{
	if(x==n-1&&y==n-1&&num==n*n)
	{
		if(ans.empty())
			ans=s;
		return;
	}//为最后一次递归设置终止条件,找到答案终止递归(项目结题)
	for(int i=0;i<8;i++)
	{
		
		int nx=x+dx[i],ny=y+dy[i];//针对下一次递归设置条件(主观认为已经到下一次)(写申请书)
		if(nx>n-1||ny>n-1||nx<0||ny<0)continue;
		if(val[nx][ny]==true)continue;
		if(i==1&&(path[nx][ny-1]==3||path[nx+1][ny]==7))continue;
		if(i==3&&(path[nx-1][ny]==5||path[nx][ny-1]==1))continue;
		if(i==5&&(path[nx-1][ny]==3||path[nx][ny+1]==7))continue;
		if(i==7&&(path[nx+1][ny]==1||path[nx][ny+1]==5))continue;
		if(url<k-1&&a[nx][ny]==url+1||url==k-1&&a[nx][ny]==0)
		{
			path[x][y]=i;//下一次行动的方向
			val[nx][ny]=true;
			dfs(nx,ny,a[nx][ny],s+to_string(i),num+1);//把参数带到下一次(申请生效)
			if(!ans.empty())return;//这里需要结束所有的void调用,已经第一次找到了,不再回溯(终止回溯/申请)
			path[x][y]=-1;//回溯(相当于撤回原来的申请,预备下一次申请)
			val[nx][ny]=false;//回溯
		}
	}	
}
int main()
{
	
	cin>>n>>k;
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
		{
			cin>>a[i][j];
			path[i][j]=-1;
		}
	string star;
	val[0][0]=true;
	dfs(0,0,0,star,1);
	if(!ans.empty())cout<<ans<<endl;
	else cout<<-1<<endl;
	return 0;
}
相关推荐
沐怡旸12 小时前
【算法】【链表】328.奇偶链表--通俗讲解
算法·面试
掘金安东尼15 小时前
Amazon Lambda + API Gateway 实战,无服务器架构入门
算法·架构
码流之上16 小时前
【一看就会一写就废 指间算法】设计电子表格 —— 哈希表、字符串处理
javascript·算法
快手技术18 小时前
快手提出端到端生成式搜索框架 OneSearch,让搜索“一步到位”!
算法
CoovallyAIHub2 天前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP2 天前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo2 天前
半开区间和开区间的两个二分模版
算法
moonlifesudo2 天前
300:最长递增子序列
算法
CoovallyAIHub2 天前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉