当前位置: 首页 > article >正文

第十五届蓝桥杯:dfs之数字接龙

#include <iostream>
using namespace std;
const int N = 300;
int a[N][N];//存值
int b[N][N];//判断某个点是否出现过 
int n,k;
string path;
int dx[] = {-1,-1,0,1,1,1,0,-1};
int dy[] = {0,1,1,1,0,-1,-1,-1};
bool dfs(int x,int y,int cur,int pos)
{
	if(pos == n*n && x == n-1 && y== n-1)
	{
		cout << path << endl;
		return true;
	}
	for(int i = 0;i<=7;i++)
	{
		int bx = x+dx[i];
		int by = y+dy[i];
		if(b[bx][by]) continue;
		if(bx<0 || bx>n-1 || by<0 || by>n-1)
		continue;
		if(((cur == k-1) && (a[bx][by] != 0)) || (cur < k-1 && a[bx][by] != cur+1)) continue;
		if(i==1&&b[bx][by-1]&&b[bx+1][by]) continue;
		else if(i==3&&b[bx-1][by]&&b[bx][by-1]) continue;
		else if(i==5&&b[bx-1][by]&&b[bx][by+1]) continue;
		else if(i==7&&b[bx+1][by]&&b[bx][by+1]) continue;

		b[bx][by] = 1;
		path+=to_string(i);
		if(dfs(bx,by,a[bx][by],pos+1))return true;
		b[bx][by] = 0;
		path.pop_back();
	}
	return false;

}
int main()
{
	cin >> n >> k;
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<n;j++)
		{
			cin >> a[i][j];
		 } 
	}
	b[0][0] = 1;
	if(!dfs(0,0,a[0][0],1))
     cout << -1 << endl;	
	return 0;
}


http://www.kler.cn/a/571704.html

相关文章:

  • 基于Flask的造价信息可视化分析系统
  • 盘古信息携手艾罗能源启动IMS数字化智能制造工厂项目,共筑新能源行业数字化标杆
  • C++17 新增特性总结: 核心语言特性
  • C#:LINQ学习笔记01:LINQ基础概念
  • 力扣1594. 矩阵的最大非负积
  • 爬蟲動態IP代理與數據採集穩定性
  • 【文生图】Win10环境借助基于ComfyUI的图狗2.3.1抢先体验阿里万相wan2.1
  • 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
  • OpenHarmony文件管理子系统
  • XMOS推出“免开发固件方案”将数字接口音频应用的开发门槛大幅降低
  • angular实现nodejs增删改查
  • 前端2025
  • 开源之夏经验分享|Koupleless 社区黄兴抗:在开源中培养工程思维
  • Spring Boot Gradle 项目中使用 @Slf4j 注解
  • 基于微信小程序的竞赛报名系统设计与实现
  • 能做期权交易的标的物有哪些?
  • IO进程线程2
  • vscode设置不自动打开项目【超详细图解】
  • 深度学习R8周:RNN实现阿尔兹海默症(pytorch)
  • C++学习(七)(标准库+STL(iotstream公司,日期/时间,器皿,算法,迭代器,多线程))