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