1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include<bits/stdc++.h> using namespace std; const int N=15; int ans[N][N]; bool flag=0; void cAp(bool cAp_flag){ for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(cAp_flag)cin>>ans[i][j]; else cout<<ans[i][j]<<' '; } if(!cAp_flag)cout<<'\n'; } }
void dfs(int x,int y){ if(flag) return ; if(x==9){ flag=1; return ; } if(ans[x][y]!=0){ if(y+1<9) dfs(x,y+1); else dfs(x+1,0); return ; }
vector<int> vis(15,0) for(int i=0;i<9;i++){ if(ans[x][i]!=0) vis[ans[x][i]]++; if(ans[i][y]!=0) vis[ans[i][y]]++; }
int r=x/3*3,c=y/3*3; for(int i=r;i<r+3;i++){ for(int j=c;j<c+3;j++){ if(ans[i][j]!=0) vis[ans[i][j]]++; } } for(int i=1;i<=9;i++){ if(!vis[i]){ ans[x][y]=i; if(y+1<9) dfs(x,y+1); else dfs(x+1,0); if(flag) return ; ans[x][y]=0; } } }
int main(void){ cAp(1); dfs(0,0); cAp(0); }
|