描述:
数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。
输入:
一个9*9的矩阵,0表示该位置是空白。
输出:
一个9*9的矩阵,格式与输入类似。
输入样例:
900050060 020070100 300102040 703800529 000345000 516009403 050208006 007090010 030010004
输出样例:
971453268 428976135 365182947 743861529 892345671 516729483 154238796 687594312 239617854
#include<iostream>
using namespace std;
int a[9][9]; int num[9];
int complace(int c,int d); void shuru(); void search(int m); void output();
int main() { shuru(); search(0); return 0;
} void shuru() { int i,j; for(i=0;i<9;i++) { cin>>num[i]; } for(i=0;i<9;i++) { for(j=8;j>=0;j--) { a[i][j]=num[i]%10; num[i]=num[i]/10; } } } void search(int m) { int i; if(m==81) { output();
} else if(a[m/9][m%9]!=0) { search(m+1); } else { for(i=1;i<=9;i++) { if(complace(m,i)==1) { a[m/9][m%9]=i; search(m+1); }
} a[m/9][m%9]=0; } } int complace(int c,int d) { int flag; int i,j; flag=1; for(i=0;i<9;i++) { if(a[i][c%9]==d) { flag=0; break; }
} for(i=0;i<9;i++) { if(a[c/9][i]==d) { flag=0; break; } } for(i=(c/9)/3*3;i<(c/9)/3*3+3;i++) { for(j=(c%9)/3*3;j<(c%9)/3*3+3;j++) if(a[i][j]==d) { flag=0; return 0; } } return (flag);
} void output() { int i,j; for(i=0;i<9;i++) { for(j=0;j<9;j++) { cout<<a[i][j]; } cout<<endl; } }