题解 | #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届毕业生现状#