【水】9*9数独求助
  • 板块灌水区
  • 楼主幽灵特工
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/3/30 21:07
  • 上次更新2023/11/5 01:21:09
查看原帖
【水】9*9数独求助
332549
幽灵特工楼主2021/3/30 21:07

这道题我的代码原封不动地输出了输入数据。。。咋办,求助

代码在最下面,先放题

题面

输入一个9*9的未完成数独,要求完成此数独,输出任意一解。

样例输入

103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107

样例输出

143628579
572139468
986754231
391542786
468917352
725863914
237481695
619275843
854396127

我的代码

#include <iostream>
using namespace std;
int t,a[10][10];

bool ok(){
	for(int i=1;i<=9;i++)for(int j=1;j<=9;j++)if(a[i][j]==0)return 0;
	return 1;
}
bool flag=0;
void DFS(int x,int y,int k){
	if(flag)return ;
	if(a[x][y]==0){
		for(int i=1;i<=9;i++){
			if(a[i][y]==k||a[x][i]==k)return;
		}
		int xx=x>6?7:(x>3?4:1);
		int yy=y>6?7:(y>3?4:1);
		for(int i=0;i<3;i++){
			for(int j=0;j<3;j++){
				if(a[xx+i][yy+j]==k)return ;
			}
		}
		a[x][y]=k;
		flag=ok();
		if(flag)return ;
		for(int i=1;i<=9;i++){
			if(x+1<=9&&!flag)DFS(x+1,y,i);
			if(x-1>=1&&!flag)DFS(x-1,y,i);
			if(y+1<=9&&!flag)DFS(x,y+1,i);
			if(y-1>=1&&!flag)DFS(x,y-1,i);
		}
		if(flag)return ;
		a[x][y]=0;
	}
}

int main(){
	cin>>t;
	while(t--){
		//for(int i=1;i<=9;i++)for(int j=1;j<=9;j++)a[i][j]=getchar()-'0';
		string s;
		for(int i=1;i<=9;i++){
			cin>>s;
			for(int j=0;j<9;j++){
				a[i][j+1]=s[j]-'0';
			}
		}
		int x1,y1;
		for(int i=1;i<=9&&!flag;i++){
			for(int j=1;j<=9&&!flag;j++){
				if(a[i][j]==0){
					x1=i;y1=j;goto bb;
				}				
			}
		}
		bb:;
		for(int k=1;k<=9&&!flag;k++){
			if(flag)goto cc;
			DFS(x1,y1,k);
		}
		cc:;
		for(int i=1;i<=9;i++){
			for(int j=1;j<=9;j++){
				cout<<a[i][j];
			}
			cout<<endl;
		}		
	}
}
2021/3/30 21:07
加载中...