51| 数独

代码实现

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N = 10;
int a[N][N];
bool col[N][N], row[N][N], st[3][3][N];
bool dfs(int x, int y)
{
	// 出口
	if(y == 10)
	{
		x ++;
		y = 1;
	 } 
	if(x == 10) return true;
	if(a[x][y]) return dfs(x, y+1); // 已经填值了 
	for(int i = 1; i <= 9; i++)
	{
		if(row[x][i] || col[y][i] || st[(x-1)/3][(y-1)/3][i]) continue; // 剪枝
		 // 递归搜索
		 row[x][i] = col[y][i] = st[(x-1)/3][(y-1)/3][i] = 1;
		 a[x][y] = i; 
		 if(dfs(x, y+1)) return true; // 已经找到结果 
		 // 回溯 
		 row[x][i] = col[y][i] = st[(x-1)/3][(y-1)/3][i] = 0;
		 a[x][y] = 0; 
	 } 
	 return false; // 前面有填错了 
}
int main()
{
	for(int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <= 9; j++)
		{
			int x; cin >> x;
			a[i][j] = x;
			if(x)	row[i][x] = col[j][x] = st[(i-1)/3][(j-1)/3][x] = 1; // 标记 
		}
	}
	dfs(1,1);
	for(int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <= 9; j++) cout << a[i][j] << " ";
		cout << endl; 
	}
	return 0;
}
相关推荐
稚南城才子,乌衣巷风流1 小时前
ST 表(Sparse Table)算法详解:原理、实现与应用
算法
hold?fish:palm1 小时前
9 找到字符串中所有字母异位词
c++·算法·leetcode
Sw1zzle1 小时前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法
青山木2 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
不会就选b2 小时前
算法日常・每日刷题--<归并排序>1
数据结构·算法
危桥带雨2 小时前
排序算法(快排、归并、计数、基数排序)
数据结构·算法·排序算法
啦啦啦啦啦zzzz2 小时前
算法:回溯算法
c++·算法·leetcode
IT探索2 小时前
Linux 查找文件指令总结
linux·算法
Lumos1863 小时前
51单片机从零到实战(完结)——后续学习路线建议
算法