[关闭]
@shixinyi 2017-10-09T10:44:18.000000Z 字数 1049 阅读 400

乱七八糟的东东

order


数独

  1. //Serene
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<cstdio>
  7. #include<cmath>
  8. using namespace std;
  9. const int maxn=12;
  10. int ans[maxn][maxn];
  11. bool h[maxn][maxn],le[maxn][maxn],ge[maxn][maxn],ok=0;
  12. int aa;char cc;
  13. int read() {
  14. aa=0;cc=getchar();
  15. while(cc<'0'||cc>'9') cc=getchar();
  16. while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
  17. return aa;
  18. }
  19. int get_ge(int x,int y) {
  20. x=(x-1)/3+1;y=(y-1)/3+1;
  21. return (x-1)*3+y;
  22. }
  23. bool kz(int x,int y,int num) {
  24. if(!num) return 0;
  25. int gg=get_ge(x,y);
  26. if(h[x][num]) return 0;
  27. if(le[y][num]) return 0;
  28. if(ge[gg][num]) return 0;
  29. h[x][num]=le[y][num]=ge[gg][num]=1;
  30. return 1;
  31. }
  32. void p() {
  33. ok=1;
  34. for(int i=1;i<=9;++i) {
  35. printf("%d",ans[i][1]);
  36. for(int j=2;j<=9;++j) printf(" %d",ans[i][j]);
  37. printf("\n");
  38. }
  39. }
  40. void s(int x,int y) {
  41. if(x>9) p();
  42. if(ok) return;
  43. int xx,yy;
  44. xx=x;yy=y+1;xx+=yy/10;yy=(yy-1)%9+1;
  45. if(ans[x][y]) s(xx,yy);
  46. else {
  47. for(int i=1;i<=9&&!ok;++i) if(kz(x,y,i)){
  48. ans[x][y]=i; s(xx,yy);
  49. h[x][i]=le[y][i]=ge[get_ge(x,y)][i]=0;
  50. }
  51. ans[x][y]=0;
  52. }
  53. }
  54. int main() {
  55. for(int i=1;i<=9;++i) for(int j=1;j<=9;++j) ans[i][j]=read(),kz(i,j,ans[i][j]);
  56. s(1,1);
  57. return 0;
  58. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注