0分悬关求调
  • 板块P1784 数独
  • 楼主Eason_cyx大愚若智
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/8/14 11:22
  • 上次更新2023/11/3 03:56:31
查看原帖
0分悬关求调
741244
Eason_cyx大愚若智楼主2023/8/14 11:22

rt,找不到错啊。。。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int gong[10][10] = {
	{0,0,0,0,0,0,0,0,0,0},	
	{0,1,1,1,2,2,2,3,3,3},	
	{0,1,1,1,2,2,2,3,3,3},	
	{0,1,1,1,2,2,2,3,3,3},	
	{0,4,4,4,5,5,5,6,6,6},	
	{0,4,4,4,5,5,5,6,6,6},	
	{0,4,4,4,5,5,5,6,6,6},	
	{0,7,7,7,8,8,8,9,9,9},	
	{0,7,7,7,8,8,8,9,9,9},	
	{0,7,7,7,8,8,8,9,9,9}	
};
int a[15][15];
bool vis[15][15],cntr[15][15],cntc[15][15],cntg[15][15];
void dfs(int x,int y) {
	if(x == 10 && y == 1) {
		for(int i = 1;i <= 9;i++) {
			for(int j = 1;j <= 9;j++) {
				cout << a[i][j] << " \n"[j == 9];
			}
		}
		exit(0);
	}
	if(vis[x][y]) return;
	int nx = x,ny = y+1;
	if(ny == 10) nx = x+1,ny = 1;
	if(a[nx][ny]) {
		dfs(nx,ny);
		return;
	}
	for(int i = 1;i <= 9;i++) {
		if(cntr[x][i] || cntc[y][i] || cntg[gong[x][y]][i]) continue;
		cntr[x][i] = cntc[y][i] = cntg[gong[x][y]][i] = true;
		a[x][y] = i;
		dfs(nx,ny);
		cntr[x][i] = cntc[y][i] = cntg[gong[x][y]][i] = false;
		a[x][y] = 0;
	}
}
int main(){
	for(int i = 1;i <= 9;i++)
		for(int j = 1;j <= 9;j++)
			cin >> a[i][j];
	dfs(1,1);
	return 0;
}

悬一关!

2023/8/14 11:22
加载中...