蒟蒻求救,全RE
  • 板块P1784 数独
  • 楼主Gold_Ballon
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/2/26 13:49
  • 上次更新2024/2/26 18:54:58
查看原帖
蒟蒻求救,全RE
1137842
Gold_Ballon楼主2024/2/26 13:49
#include<cstdio>
using namespace std;
int a[10][10];

bool b[10];
int len,c[10];
void find(int x,int y,int f){
	if(f == 1){
		for(int i = 0;i < 9;i++){
			if(a[x][i]){
				b[a[x][i]] = 1;
			}
		}
		find(x,y,2);
	}
	else if(f == 2){
		for(int i = 0;i < 9;i++){
			if(a[i][x]){
				b[a[i][x]] = 1;
			}
		}
		find(x,y,3);
	}
	else{
		int k = y / 3 - 1,h = x / 3 - 1;
		if(k == 0) k = 2;
		int lk = k + 3,lh = h + 3;
		for(int i = h;i < lh;i++){
			for(int j = k;j < lk;j++){
				if(a[i][j]){
					b[a[i][j]] = 1;
				}
			}
		}
		for(int i = 0;i < 9;i++){
			if(!b[i]) c[len++] = i + 1;
		}
	}
	return;
}

void dfs(int x,int y){
	find(x,y,1);
	if(!len){
		for(int i = 0;i < 9;i++){
			for(int j = 0;j < 9;j++){
				printf("%d ",a[i][j]);
			}
			printf("\n");
		}
		printf("wwwwwww");
		return;
	}
	int c_1[len + 1],len_1 = len;
	for(int i = 0;i < len;i++) c_1[i] = c[i];
	for(int z = 0;z < len_1;z++){
		a[x][y] = c_1[z];
		int i_1,j_1;
		bool f = 0;
		for(int i = 0;i < 9;i++){
			for(int j = 0;j < 9;j++){
				if(!a[i][j]){
					i_1 = i,j_1 = j;
					f = 1;
					break;
				}
			}
			if(f){
				break;
			}
		}
		dfs(i_1,j_1);
	}
}

int main(){
	bool f = 1;
	int i_1,j_1;
	for(int i = 0;i < 9;i++){
		for(int j = 0;j < 9;j++){
			scanf("%d",&a[i][j]);
			if(!a[i][j] && f){
				i_1 = i,j_1 = j;
				f = 0;	
			}
		}
	}
	dfs(i_1,j_1);
	return 0;
}
2024/2/26 13:49
加载中...