Sudoku

搜索......每一个都去试一遍.....A了,代码:

#include<iostream>
#include<cstring>
using namespace std;
int a[1100][1100];
int ans1[1100][1100],ans2[1100][1100],ans3[1100][1100];
int n;
bool djy=0;
void dfs(int x,int y) {
    if(djy==1) return ;//为了不OLE....
    if(a[x][y]!=0) { //有数
        if(x==9&&y==9) { //输出
            for(int i=1; i<=9; i++) {
                for(int j=1; j<=9; j++) {
                    cout<<a[i][j];
                }
                cout<<endl;
            }
            djy=1;
            cout<<endl;
            return ;
        }
        if(y==9) { //行数加加
            dfs(x+1,1);
        } else { //列数加加
            dfs(x,y+1);
        }
    }
    if(a[x][y]==0) { //没数
        for(int i=1; i<=9; i++) {
            if(ans1[x][i]==0&&ans2[y][i]==0&&ans3[(x-1)/3*3+(y-1)/3+1][i]==0) { //判断 
                a[x][y]=i;
                ans1[x][i]=1;
                ans2[y][i]=1;
                ans3[(x-1)/3*3+(y-1)/3+1][i]=1;
                if(x==9&&y==9) {
                    for(int i=1; i<=9; i++) {
                        for(int j=1; j<=9; j++) {
                            cout<<a[i][j];
                        }
                        cout<<endl;
                    }
                    djy=1;
                    cout<<endl;
                    return ;
                }
                if(y==9) dfs(x+1,1);//和上面的一样 
                else dfs(x,y+1);
                a[x][y]=0;
                ans1[x][i]=0;
                ans2[y][i]=0;
                ans3[(x-1)/3*3+(y-1)/3+1][i]=0;//回溯 
            }
        }
    }
}
int main() {
    cin>>n;
    for(int k=1; k<=n; k++) {
        memset(ans1,0,sizeof(ans1));//赋初值
        memset(ans2,0,sizeof(ans2));
        memset(ans3,0,sizeof(ans3));
        for(int i=1; i<=9; i++) {
            for(int j=1; j<=9; j++) {
                char ch;
                cin>>ch;
                a[i][j]=ch-'0';
                if(a[i][j]>0) {
                    ans1[i][a[i][j]]=1;//标记有数
                    ans2[j][a[i][j]]=1;//同上
                    ans3[(i-1)/3*3+(j-1)/3+1][a[i][j]]=1;//宫格公式.....
                }
            }
        }
        djy=0;
        dfs(1,1);
    }
}

A了QwQ(不小心点了格式化)

posted @ 2018-08-09 11:26  DJY_01  阅读(131)  评论(0编辑  收藏  举报