数独游戏

来源:互联网 发布:魔神召唤士 网络骑士 编辑:程序博客网 时间:2024/05/21 11:20

描述:

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

输入:

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

输出:

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

输入样例:

900050060020070100300102040703800529000345000516009403050208006007090010030010004

输出样例:

971453268428976135365182947743861529892345671516729483154238796687594312239617854




#include<stdio.h>


int search(int n); 
int judge();


int a[9][9];
int b[9]; 


int main()
{
int i,j;
for(i=0; i<9; i++)
{
scanf("%d",&b[i]);
}
for(i=0; i<9; i++)
{
for(j=8; j>=0; j--)
{
a[i][j]=b[i]%10;
b[i]=b[i]/10;
}
}


search(0);
return 0;
}


int search(int n)
{
int i,j,flag,tmp,num,e,f;
if(n==81)
{
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}

else
{
if(a[n/9][n%9]==0)
{

for(i=1; i<=9; i++)
{
flag=1;
for(j=0; j<9; j++)
{
if((i==a[n/9][j]&&j!=n%9)||(i==a[j][n%9]&&j!=n/9))
{
flag=0;
break;

}
if(flag==1)
{
tmp=(n/9)/3*3;
num=(n%9)/3*3;
for(e=tmp; e<tmp+3&&flag!=0; e++)
{
for(f=num; f<num+3; f++)
{
if((e!=n/9||f!=n%9)&&a[e][f]==i)
{
flag=0;
break;
}
}
}
}
if(flag==1)
{
a[n/9][n%9]=i;
search(n+1);
a[n/9][n%9]=0;
}
}
}
else
{
search(n+1);
}
}
}

原创粉丝点击