0pts WA 求条
查看原帖
0pts WA 求条
1118614
I_Love_DS楼主2024/10/1 19:33
#include <bits/stdc++.h>
using namespace std;
int a[15][15];
bool g[15][15],l[15][15],r[15][15],flag = false;
void print(){
	for (int i = 1; i <= 9; i++) {
		for (int j = 1; j <= 9; j++) 
			printf("%d",a[i][j]);
		printf("\n");
	}
}
int check(int x,int y){
	if (x <= 3) {
		if (y <= 3) return 1;
		else if (y <= 6) return 2;
		else return 3;
	}
	else if (x <= 6) {
		if (y <= 3) return 4;
		else if (y <= 6) return 5;
		else return 6;
	}
	else {
		if (y <= 3) return 7;
		else if (y <= 6) return 8;
		else return 9;
	}
}
inline void dfs(int x,int y){
	if (flag) return;
	if (y > 9) dfs(x + 1,1);
	if (x > 9) {
		print();
		flag = true;
		return;
	}
	if (a[x][y] != 0) {
		dfs(x,y + 1);
		return;
	}
	for (int i = 1; i <= 9; i++) {
		int _g = check(x,y);
		if (!l[x][i] && !r[y][i] && !g[_g][i]) {
			l[x][i] = true;
			r[y][i] = true;
			g[_g][i] = true;
			a[x][y] = i;
			dfs(x,y + 1);
			a[x][y] = 0;
			g[_g][i] = false;
			r[y][i] = false;
			l[x][i] = false;
		}
	}
	return;
}
void Main(){
	for (int i = 1; i <= 9; i++) {
		for (int j = 1; j <= 9; j++) {
			char c = getchar();
			a[i][j] = c - '0';
		}
		char c = getchar();
		if (c == '\r') getchar();
	}
	for (int i = 1; i <= 9; i++) 
		for (int j = 1; j <= 9; j++) 
			if (a[i][j] != 0) {
				int _g = check(i,j);
				l[i][a[i][j]] = true;
				r[j][a[i][j]] = true;
				g[_g][a[i][j]] = true;
			}
	dfs(1,1);
}
int main(){
	int t;
	scanf("%d",&t);
	getchar();
	while (t--) Main();
	return 0;
}
2024/10/1 19:33
加载中...