#5 TLE求调
查看原帖
#5 TLE求调
1010650
Expert_Dreamer楼主2024/2/24 10:39
#include<bits/stdc++.h>
using namespace std;
int a[10][10],f,w,v;
inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
inline void dfs(int i,int j){
	if(i==10&&j==1){
		for(int i=1;i<=9;i++){
		    for(int j=1;j<=9;j++) printf("%d ",a[i][j]);
		    printf("\n");
	    }    
		exit(0);
	}
	if(a[i][j]==0){
		for(int h=1;h<=9;h++){
			f=0;
			for(int m=1;m<=9;m++) if(a[i][m]==h){f=1;break;}
			if(f==0){
				for(int m=1;m<=9;m++) if(a[m][j]==h){f=1;break;}
				if(f==0){
					w=i,v=j;
					while (w%3!=1) w--;
					while (v%3!=1) v--;
					for(int y=w;y<=w+2;y++){
						for(int z=v;z<=v+2;z++) if(a[y][z]==h){f=1;break;}
					}
					if(f==0){
						a[i][j]=h;  
						if(j+1>9) dfs(i+1,1),a[i][j]=0; 
						else dfs(i,j+1),a[i][j]=0; 			
					}
				}
			} 
		}		
	}
	else{
		if(j+1>9) dfs(i+1,1);
		else dfs(i,j+1);
	} 
}
int main(){
	for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) a[i][j]=read();
	dfs(1,1);       
}
2024/2/24 10:39
加载中...