poj2676[

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<stack>
#define ll long long
#define N 200000
#include<math.h>
#include<queue>
using namespace std;
int mp[15][15];
char str[15];
char c;
int pos_t;
int col_vis[15][15];
int row_vis[15][15];
int nine_nine[15][15];
struct node{
int x,y;
};
node pos[100];
int yes;
void dfs(int n){
  //  cout<<"ok"<<endl;
if(yes)return ;
int xx=pos[n].x;
int yy=pos[n].y;
int jiu=(xx/3)*3+yy/3;
for(int i=1;i<=9;i++){
    if(col_vis[yy][i]||row_vis[xx][i]||nine_nine[jiu][i])continue;
    col_vis[yy][i]=1;
    row_vis[xx][i]=1;
    nine_nine[jiu][i]=1;
    mp[xx][yy]=i;
    if(n==pos_t-1||yes){
        yes=1;
    }
    dfs(n+1);
  if(yes)return;
    col_vis[yy][i]=0;
    row_vis[xx][i]=0;
    nine_nine[jiu][i]=0;
}
}
int main(){
// freopen("input2.txt","r",stdin);
int t;
cin>>t;
while(t--){
        memset(nine_nine,0,sizeof(nine_nine));
        memset(row_vis,0,sizeof(row_vis));
        memset(col_vis,0,sizeof(col_vis));
        yes=0;
        pos_t=0;
        //cout<<"ok"<<endl;
    for(int i=0;i<9;i++){
            scanf("%s",str);
        for(int j=0;j<9;j++){
           mp[i][j]=str[j]-'0';
            if(mp[i][j]==0){
                pos[pos_t].x=i;
                pos[pos_t++].y=j;
            }
            else {
                   row_vis[i][mp[i][j]]=1;
                    col_vis[j][mp[i][j]]=1;
                    nine_nine[(i/3)*3+j/3][mp[i][j]]=1;
                 }
        }
    }///   输入完毕
    dfs(0);
    for(int i=0;i<9;i++){
        for(int j=0;j<9;j++){
            printf("%d",mp[i][j]);
        }
        printf("\n");
    }
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40675883/article/details/82806291