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

蓝桥杯备考:DFS之数独

这道题的意思是每个3*3的格子只能有1到9九个数字,每行只能有1到9九个数字,每列也只能有1到9每个数字,我们可以开个col[N][N]表示某一列出现过的数字

row[N][N]表示某一行出现的数字,st[N][N][N]表示每个3*3的子矩阵里出现的数字

话说到这里,我们已经可以实现代码了

#include <iostream>
using namespace std;

const int N = 15;
int a[N][N];
bool col[N][N];
bool row[N][N];
bool st[N][N][N];
bool dfs(int i,int j)
{
	if(j==9)
	{
		j=0;
		i++;
	}
	if(i==9)
	{
		return true;
	}
	if(a[i][j])
	{
		return dfs(i,j+1);
	}
	for(int x = 1;x<=9;x++)
	{
		if(col[j][x] || st[i/3][j/3][x]||row[i][x]) continue;
		col[j][x] = st[i/3][j/3][x] = row[i][x] = true;
		a[i][j] = x;
		if(dfs(i,j+1)) return true;
		col[j][x] = st[i/3][j/3][x] = row[i][x]= false;
		a[i][j] = 0; 
	}
	return false;
}
int main()
{
	for(int i = 0;i<9;i++)
	{
		for(int j = 0;j<9;j++)
		{
			cin >> a[i][j];
			int x = a[i][j];
			if(x){
			col[j][x] = true;
			st[i/3][j/3][x] = true;
			row[i][x] = true;
	     	}
		}
	}
	dfs(0,0);
	for(int i = 0;i<9;i++)
	{
		for(int j = 0;j<9;j++)
		{
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	
	
	return 0;
}


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

相关文章:

  • Unity高渲染管线
  • linux0.11内核源码修仙传第十一章——硬盘初始化
  • 数据库约束、常见语句等
  • VGG 改进:添加ScConv空间与通道特征重构卷积
  • pip show protobuf ValueError: invalid literal for int() with base 10: ‘‘
  • 【redis】前缀树 trie-radix tree-rax
  • 协作机械臂需要加安全墙吗? 安全墙 光栅 干涉区
  • 详细比较StringRedisTemplate和RedisTemplate的区别及使用方法,及解决融合使用方法
  • Go语言nil原理深度解析:底层实现与比较规则
  • ReAct: Synergizing Reasoning and Acting in Language Models
  • 数字化转型1061丨某著名企业新零售云业务中台总体解决方案(文末有下载方式)
  • ElasticSearch在Windows单节点部署及使用
  • 云原生周刊:Ingress-NGINX 漏洞
  • JDBC FetchSize不生效,批量变全量致OOM问题分析
  • 将网页操作的脚本自动保存成yaml ,然后修改使用
  • RK3568笔记八十一: Linux 小智AI聊天机器人移植
  • pnpm node_modules 高效删除
  • XHR.readyState详解
  • Vue warn :意外的非属性属性(类)被传递到组件
  • DeepSeek与GPT的全方位对比及其为编程工作带来的巨大变革