模拟WA了求调
查看原帖
模拟WA了求调
630240
VegeBeany楼主2023/2/11 15:21
#include<bits/stdc++.h>
using namespace std;
char num[11][11];
int vis[11][11];
int p[11][11];
int main(){
//	freopen("num.in","r",stdin);
//	freopen("num.out","w",stdout);
	for(int i=1;i<=9;i++){
		string s;
		cin>>s;
		for(int j=1;j<=9;j++)
			num[i][j]=s[j-1],p[i][j]=(num[i][j]=='.')?0:1;
	}
	int fff=0;
	t:
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++)
		for(int k=1;k<=9;k++)
		vis[j][k]=p[j][k];
		for(int j=1;j<=9;j++){
			for(int k=1;k<=9;k++){
				if(num[j][k]-'0'==i){
					for(int l=1;l<=9;l++){
						if(num[j][l]-'0'==i&&l!=k){
							printf("ERROR");return 0;
						}
						if(num[l][k]-'0'==i&&l!=j){
							printf("ERROR");return 0;
						}
						vis[j][l]=vis[l][k]=1;
					}
					int x=(j-1)/3*3+1,y=(k-1)/3*3+1;
					for(int l=x;l<x+3;l++)
					for(int m=y;m<y+3;m++){
						if(num[l][m]-'0'==i&&(l!=j||m!=k)){
							printf("ERROR");return 0;
						}
						vis[l][m]=1;
					}
				}
			}
		}
		int pp=0;
		tian:
			for(int j=1;j<=9;j++){
				int x=(j-1)/3+1,y=(j-1)%3+1;
				x=(x-1)*3+1,y=(y-1)*3+1;
				int f=0;
				int xx=0,yy=0;
				for(int k=x;k<x+3;k++)
					for(int l=y;l<y+3;l++){
						if(vis[k][l]==0)
							f++,xx=k,yy=l;
					}
				if(f==1){
					pp=1;
					fff=1;
					num[xx][yy]=i+'0';
					for(int l=1;l<=9;l++)vis[xx][l]=vis[l][yy]=1;
					for(int l=x;l<x+3;l++)
					for(int m=y;m<y+3;m++)
					vis[l][m]=1;
					p[xx][yy]=1;
					goto tian;
				}
			}
		if(pp==1)
		goto t;
	}
	if(fff==0){
		printf("ERROR");return 0;
	}
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++)
			cout<<num[i][j];
		cout<<endl;
	}
	return 0;
}
2023/2/11 15:21
加载中...