#include<iostream>
using namespace std;
int a[9][9];
void search(int m);
int test(int x,int m);
void output();
int main()
{
int i,j;
char ch;
for(i=0;i<9;i++) //输入时不能直接输入,否则会将一个九位数读入
{
for(j=0;j<9;j++)
{
cin>>ch;
a[i][j]=ch-'0';
}
}
search(0);
}
void search(int m)
{
int i;
if(m==81)
{
output();
}
else
{
if(a[m/9][m%9]==0) //判断此位置是否为零
{
for(i=1;i<=9;i++)
{
if(test(i,m)) //测试是否满足条件
{
a[m/9][m%9]=i;
search(m+1);
a[m/9][m%9]=0;
}
}
}
else
{
search(m+1);
}
}
}
int test(int x,int m)
{
int i,j,flag=1,row,col;
row=m/9;
col=m%9;
for(i=0;i<9;i++) //判断每行是否有重复
{
if(i!=col&&x==a[row][i])
{
flag=0;
break;
}
}
for(i=0;i<9;i++) //判断每列是否有重复
{
if(i!=row&&x==a[i][col])
{
flag=0;
break;
}
}
for(i=row/3*3;i<row/3*3+3;i++) //判断每个小九宫格是否有重复
{
for(j=col/3*3;j<col/3*3+3;j++)
{
if((i!=row&&j!=col)&&a[i][j]==x)
{
flag=0;
break;
}
}
}
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;
}
}
数独游戏
#include<iostream>
using namespace std;
int a[9][9];
void search(int m);
int test(int x,int m);
void output();
int main()
{
int i,j;
char ch;
for(i=0;i<9;i++) //输入时不能直接输入,否则会将一个九位数读入
{
for(j=0;j<9;j++)
{
cin>>ch;
a[i][j]=ch-'0';
}
}
search(0);
}
void search(int m)
{
int i;
if(m==81)
{
output();
}
else
{
if(a[m/9][m%9]==0) //判断此位置是否为零
{
for(i=1;i<=9;i++)
{
if(test(i,m)) //测试是否满足条件
{
a[m/9][m%9]=i;
search(m+1);
a[m/9][m%9]=0;
}
}
}
else
{
search(m+1);
}
}
}
int test(int x,int m)
{
int i,j,flag=1,row,col;
row=m/9;
col=m%9;
for(i=0;i<9;i++) //判断每行是否有重复
{
if(i!=col&&x==a[row][i])
{
flag=0;
break;
}
}
for(i=0;i<9;i++) //判断每列是否有重复
{
if(i!=row&&x==a[i][col])
{
flag=0;
break;
}
}
for(i=row/3*3;i<row/3*3+3;i++) //判断每个小九宫格是否有重复
{
for(j=col/3*3;j<col/3*3+3;j++)
{
if((i!=row&&j!=col)&&a[i][j]==x)
{
flag=0;
break;
}
}
}
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;
}
}
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
数独游戏规则
在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