题海拾贝:P1784 数独

Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

我的博客: <但凡.

我的专栏: 《编程之路》《数据结构与算法之美》《题海拾贝》《C++修炼之路》

1、题目

2、题解

cpp 复制代码
#include<iostream>
using namespace std;
const int N = 15;
int a[N][N];
bool st1[N][N], st2[N][N], st3[N][N][N];
bool dfs(int i,int j)
{
	if (j == 9)
	{
		i++;
		j = 0;
	}
	
	if (i == 9) return true;
	if (a[i][j]) return dfs(i, j + 1);//如果不等于0说明填过了

	for (int x = 1;x <= 9;x++)
	{
		if (st1[i][x] || st2[j][x] || st3[i / 3][j / 3][x]) continue;
		st1[i][x] = st2[j][x] = st3[i / 3][j / 3][x] = true;

		a[i][j] = x;
		if (dfs(i, j + 1)) return true;
		st1[i][x] = st2[j][x] = st3[i / 3][j / 3][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)
			{
				st1[i][x] = st2[j][x] = st3[i/3][j/3][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;
}
相关推荐
搂鱼11451411 分钟前
(倍增)洛谷 P1613 跑路/P4155 国旗计划
算法
Yingye Zhu(HPXXZYY)12 分钟前
Codeforces 2021 C Those Who Are With Us
数据结构·c++·算法
无聊的小坏坏1 小时前
三种方法详解最长回文子串问题
c++·算法·回文串
长路 ㅤ   2 小时前
Java后端技术博客汇总文档
分布式·算法·技术分享·编程学习·java后端
秋说2 小时前
【PTA数据结构 | C语言版】两枚硬币
c语言·数据结构·算法
qq_513970442 小时前
力扣 hot100 Day37
算法·leetcode
不見星空2 小时前
leetcode 每日一题 1865. 找出和为指定值的下标对
算法·leetcode
我爱Jack3 小时前
时间与空间复杂度详解:算法效率的度量衡
java·开发语言·算法
DoraBigHead4 小时前
小哆啦解题记——映射的背叛
算法
Heartoxx4 小时前
c语言-指针与一维数组
c语言·开发语言·算法