题解 | #Sudoku#

Sudoku

http://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1

参考了大佬的题解

#include<bits/stdc++.h>

using namespace std;
void shudu(int i,int j);
int a[9][9]={0};
int flag=0;
int main(){
    for(int i=0;i<9;++i){
        for(int j=0;j<9;++j)
            cin>>a[i][j];
    }
    shudu(0,0);
    for(int i=0;i<9;++i){
        for(int j=0;j<9;++j){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

void shudu(int i,int j){
    if(i>=9||j>=9){
        flag=1;
        return;
    }
    if(a[i][j]==0){
        set<int> s;
        for(int k=0;k<9;++k)
            s.insert(a[i][k]);
        for(int m=0;m<9;++m)
            s.insert(a[m][j]);
        for(int m=i/3*3;m<i/3*3+3;++m){
            for(int k=j/3*3;k<j/3*3+3;++k){
                s.insert(a[m][k]);
            }
        }
        for(int num=1;num<=9;++num){
            if(flag==0&&s.find(num)==s.end()){
                a[i][j]=num;
                if(j==8)
                    shudu(i+1,0);
                else
                    shudu(i,j+1);
            }
        }
        if(flag==0){
            a[i][j]=0;return;
        }
        
    }else{
        if(j==8)
            shudu(i+1,0);
        else
            shudu(i,j+1);
    }
    
    
    
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务