panlongwu

数独爱好者
  • 内容数

    1
  • 注册日期

  • 最后上线

论坛声望

0 Neutral

关于 panlongwu

  1. #include<iostream> #include<iomanip> #include<string> #include<cstring> using namespace std; int i=0; int A[9][9]={0}; int fish=0; int main() { void dfs(int i,int j); void output(); string str; while(getline(cin,str)) { i=i%9; int si=0; for(int j=0;j<9;j++) { A[i][j]=str[si]-'0'; si=si+2; } int flag=0; if(i==8) { for(int r=0;r<9;r++) { for(int c=0;c<9;c++) { if(A[r][c]==0) { dfs(r,c);flag=1;break; } } if(flag==1){flag=0;break;} } if(fish==1) { output(); fish=0; } } i++; } return 0; } void dfs(int i,int j) { bool col(int r,int c,int x); bool row(int r,int c,int x); bool block(int r,int c,int x); for(int x=1;x<=9;x++) { A[i][j]=x; //cout<<"A["<<i<<"]["<<j<<"]="<<x<<endl; bool Cok=col(i,j,x); bool Rok=row(i,j,x); bool Bok=block(i,j,x); if(Cok && Rok && Bok) { int rr=0,cc=0; int flag=0; for(rr=0;rr<9;rr++) { for(cc=0;cc<9;cc++) { if(A[rr][cc]==0) { flag=1;break; } } if(flag==1){flag=0;break;} } if(rr==9 && cc==9) { fish=1;return; } dfs(rr,cc); if(fish==1){return;} } A[i][j]=0; } } bool col(int r,int c,int x) { for(int i=0;i<9;i++) { if(i==r) { continue; } if(A[i][c]==x) { return false; } } return true; } bool row(int r,int c,int x) { for(int i=0;i<9;i++) { if(i==c) { continue; } if(A[r][i]==x) { return false; } } return true; } bool block(int r,int c,int x) { int i=0,j=0; switch(r) { case 0:case 1:case 2:i=0;break; case 3:case 4:case 5:i=3;break; case 6:case 7:case 8:i=6;break; } switch(c) { case 0:case 1:case 2:j=0;break; case 3:case 4:case 5:j=3;break; case 6:case 7:case 8:j=6;break; } for(int row=i;row<i+3;row++) { for(int col=j;col<j+3;col++) { if(row==r && col==c){continue;} if(A[row][col]==x){return false;} } } return true; } void output() { for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { cout<<A[i][j]; if(j!=8){cout<<" ";} } cout<<endl; } }