数独游戏

来源:互联网 发布:中国云计算学术大会 编辑:程序博客网 时间:2024/05/22 14:54


描述:

数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。

输入:

一个9*9的矩阵,0表示该位置是空白。

输出:

一个9*9的矩阵,格式与输入类似。

输入样例:

900050060020070100300102040703800529000345000516009403050208006007090010030010004

输出样例:

971453268428976135365182947743861529892345671516729483154238796687594312239617854

#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; } }