#include<iostream>
#include<iomanip>
#include<fstream>
#include<cstdlib>
using namespace std;
int shudu[9][9]={0};
void init()//初始化数独表
{
int i=0,j=0;
ifstream fin("C:\\Users\\Desktop\\input.txt");
for(i=0;i<9;i++)
for(j=0;j<9;j++)
fin>>shudu[i][j];
fin.close();
cout<<"The init structure is:"<<endl;
for(i=0;i<9;i++,cout<<endl)
for(j=0;j<9;j++)
cout<<shudu[i][j]<<" ";
}
//检查在(x,y)位置处赋予i值是否满足行列互不相同的条件
bool checkAssign1(int x,int y,int i)
{
for(int c=0;c<9;c++)
if(c!=y && shudu[x][c]==i)
return false;
for(int r=0;r<9;r++)
if(r!=x && shudu[r][y]==i)
return false;
return true;
}
//检查(x,y)位置处是否满足其所在大方格中各数互不相同的条件
bool checkAssign2(int x,int y,int i)
{
for(int r=(x/3)*3;r<(x/3)*3+3;r++)
for(int c=(y/3)*3;c<(y/3*3)+3;c++)
{
if(shudu[r][c]==i)
if(r==x && c==y)
continue;
else
return false;
}
return true;
}
//81个点中分别给每一个点搜索可行解
bool search(int depth)
{
if(depth>=81)
{
return true;
}
int x,y;
x=depth/9;y=depth%9;
if(shudu[x][y]!=0)//检查(x,y)位置是否放置了数
return search(depth+1);
else
for(int i=1;i<=9;i++)
{
shudu[x][y]=i;
if(checkAssign1(x,y,i) && checkAssign2(x,y,i))
{
if(search(depth+1))
return true;
}
shudu[x][y]=0;
}
return false;
}
int main()
{
cout<<" 数独游戏设计 "<<endl;
cout<<"--------------------------"<<endl;
init();
cout<<"--------------------------"<<endl;
if(search(0))
{
cout<<"The answer is:"<<endl;
for(int i=0;i<9;i++,cout<<endl)
for(int j=0;j<9;j++)
cout<<shudu[i][j]<<" ";
}
else
{
cout<<"haven't found a resolution"<<endl;
}
system("pause");
return 0;
}
测试例子:芬兰数学家因卡拉花费3个月设计出世界上迄今难度最大九宫格游戏
数独游戏
最新推荐文章于 2022-05-12 20:55:35 发布