数独游戏java代码 数独游戏编程( 四 )


#include ctime
#include vector
using namespace std;
/**********初始9×9的矩阵*************/
/******元素为0,说明该位置还未填充***/
intMATRIX[9][9]={ {0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0}};
/*******初始给出的元素个数***********/
int INITIAL_COUNT;
/********已填充元素个数,作为填充结束标志**********/
intFINISH_COUNT=0;
/********各个元素的初始候选集合*******/
vectorvectorintIVEC(81);
/**************函数原型******************/
/*********得到初始给出的元素个数*******/
int get_initialcount();
/*******初始化候选集合***************/
void initial_candidate();
/***********从vector中删除指定元素*******/
voiddelete_value(vectorint ivec,int value);
/********更新候选集合**************/
void refresh_candidate();
/*********返回9×9候选集合元素最少的候选集合序号*******/
intmin_seq();
/********随机生成一个位置序号并取得该序号所对应的元素值******/
intchoose_seq(int min_seq);
/*******填充该元素并判断是否填充完毕********/
intis_finish(int min_seq, int choose_value);
int main()
{
/******得到初始给出的元素个数*****/
INITIAL_COUNT=get_initialcount();
/******初始化候选集合*******/
initial_candidate();
/********先更新候选集合(为了应付已经填充一部分数的情况)******/
refresh_candidate();
int i;
int MinSeq;
int ChooseValue;
MinSeq=min_seq();
ChooseValue=https://www.04ip.com/post/choose_seq(MinSeq);
while(is_finish(MinSeq,ChooseValue)!=1)
{
refresh_candidate();
MinSeq=min_seq();
ChooseValue=https://www.04ip.com/post/choose_seq(MinSeq);
}
/**********输出填好的数独游戏结果*********/
for( i=0;i9;++i)
{
for(int j=0;j9;++j)
{
coutMATRIX[i][j]'\t';
}
coutendl;
}
return 0;
}
/*******************函数定义***********************/
/*********得到初始给出的元素个数*******/
int get_initialcount()
{
int count=0;
for(int i=0;i9;++i)
{
for(int j=0;j9;++j)
{
if(MATRIX[i][j]!=0)
{
count++;
}
}
}
return count;
}
/*******初始化候选集合***************/
void initial_candidate()
{
for(int i=0;i81;++i)
{
for(int j=1;j10;++j)
{
IVEC[i].push_back(j);
}
}
}
/***********从vector中删除指定元素*******/
voiddelete_value(vectorint ivec,int value)
{
/*******如果ivec已经为空,直接退出**********/
if (ivec.size()==0)
{
return;
}
vectorint::iterator iter=ivec.begin();
while( iterivec.end()(*iter)!=value )
{
iter++;
}
if(iterivec.end())//在vector中找到已填充的元素,把它删除
{
ivec.erase(iter);
}
}
/********更新候选集合**************/
void refresh_candidate()
{
int i;
int rownum,colnum;
int row,col;
/******更新81个vector*******/
for(i=0;i81;++i)
{
row=i/9;
col=i%9;
if(MATRIX[row][col]!=0)//该位置已经填充
{
if(IVEC[i].size()!=0)//该vector不空
{
/********删除整个候选集***********/
IVEC[i].erase(IVEC[i].begin(),IVEC[i].end());
}
}
else
{
/*****删除同一行中的元素****/
for(colnum=0;colnum9;++colnum)
{
delete_value(IVEC[i],MATRIX[row][colnum]);

推荐阅读