题解 | #Sudoku#
Sudoku
https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1
#include <iostream>
using namespace std;
#include<map>
int a[9][9];
bool Sudu(pair<int,int> b[],int n,int s)
{
    bool m[10];
    int r,l;
    for(int i=0;i<10;i++)
    {
        m[i]=false;
    }
    for(int i=0;i<9;i++)
    {
        m[a[b[n].first][i]]=true;
    }
    for(int i=0;i<9;i++)
    {
        m[a[i][b[n].second]]=true;
    }
    r=((b[n].first)/3)*3;
    l=((b[n].second)/3)*3;
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            m[a[r+i][l+j]]=true;
        }
    }
    for(int i=1;i<10;i++)
    {
        if(m[i]==false)
        {
            a[b[n].first][b[n].second]=i;
            if(n==s) return true;
            else
            {
                if(Sudu(b,n+1,s)) return true;
                //a[b[n].first][b[n].second]=0;
            }
         
        }
    }
    a[b[n].first][b[n].second]=0;
    return false;
}
int main() {
    pair<int,int> b[81];
    int n=0;
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            cin>>a[i][j];
            if(a[i][j]==0)
            {
                b[n].first=i;
                b[n].second=j;
                n++;
            }
        }
    }
    Sudu(b,0,n-1);
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
}
// 64 位输出请用 printf("%lld")
#2022届毕业生现状# 巨人网络公司福利 88人发布
巨人网络公司福利 88人发布
 查看9道真题和解析
查看9道真题和解析