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

蓝桥杯备考: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;
}

相关文章:

  • 渗透测试中发现ak/sk泄露时的验证工具
  • 【Zookeeper搭建(跟练版)】Zookeeper分布式集群搭建
  • 【redis】集群 如何搭建集群详解
  • 用数组遍历出来的页面,随节点创建的ref存储在数据仓库中,如果数据删除,页面相关节点也会删除,数据仓库中随节点创建的ref会不会也同时删除
  • 【蓝桥杯速成】| 14.背包归来
  • C#中如何实现读写分离
  • 使用 SQL CTE(公共表表达式)优化数据查询的实践
  • 文件的打开与关闭
  • 【MATLAB例程】三维环境下,动态轨迹的AOA定位与UKF滤波,模拟IMU/AOA的数据融合(AOA的测角基站数量可自适应,目标运动轨迹可自行修改)
  • 蓝桥杯day1-时间问题
  • 设计模式(创建型)- 原型模式
  • Transformer | 一文了解:缩放、批量、多头、掩码、交叉注意力机制(Attention)
  • 计算机视觉算法实战——手术导航:技术、应用与未来
  • PySimpleGUI安装老版本,给软件链接,免费用,教程
  • NO.58十六届蓝桥杯备战|基础算法-枚举|普通枚举|二进制枚举|铺地毯|回文日期|扫雷|子集|费解的开关|Even Parity(C++)
  • 二分查找模板--从题目中讲解三大二分模板
  • 谈谈对spring IOC的理解,原理和实现
  • 【大模型】数字人 Sonic 的环境配置和使用
  • HDR(HDR10/ HLG),SDR
  • Appium 入门操作指南
  • 手机响应式网站怎么做/网站百度手机端排名怎么查询
  • 微信扫码登录wordpress/优化关键词具体要怎么做
  • 商务网站设计特色/网址域名大全
  • 织梦网站上传新闻/百度推广找谁做
  • 网站栏目做ip地址访问限制/优秀的软文广告欣赏
  • 美发网站怎么做/附近电脑培训学校