您的位置 首页 主动

回朔算法2

voidTuiLi::SD_in(){获取题目信息intdata[]={0,5,0,0,3,0,0,0,0,0,0,1,6,0,0,9,0,8,3,0,0,0,0,0,0,0,0,0,0,0,8,0,

void TuiLi::SD_in()

{
//获取标题信息
int data[]={0,5,0,0,3,0,0,0,0,
0,0,1,6,0,0,9,0,8,
3,0,0,0,0,0,0,0,0,
0,0,0,8,0,0,0,0,0,
0,0,0,0,0,0,7,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 i,j,z=0;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
SD[i][j]=data[z];
z++;
}
sd_in();

}

void TuiLi::sd_out()
{
int i,j,z=0;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
SD[i][j]=sudu[z];
z++;
}
}

void TuiLi::sd_print()
{
int i,j,z=0;
sd_out();
GetLocalTime(&TIME);//取得体系当时时刻
printf(“找到一个数独解获取时刻为:%d年%d月%d日%d时%d分%d秒”,TIME.wYear,TIME.wMonth,TIME.wDay,TIME.wHour,TIME.wMinute,TIME.wSecond);
for(i=0;i<9;i++)
{
printf(” “);
for(j=0;j<9;j++)
{
printf(“%d “,SD[i][j]);

}
printf(“”);
}
printf(“”);
}

int TuiLi::ok_sd() //本领独用剪枝函数
{
int i,j,x;
sd_out();

for(x=0;x<9;x++)
for(i=0;i<9;i++)
for(j=i+1;j<9;j++)
{
if(SD[x][i]==SD[x][j]&&SD[x][i]!=0) return 1;
}
//不允许行重复

for(x=0;x<9;x++)
for(i=0;i<9;i++)
for(j=i+1;j<9;j++)
{
if(SD[i][x]==SD[j][x]&&SD[i][x]!=0) return 1;
}
//不允许列重复

return 0;
}

int TuiLi::go_sd() //本领独进口函数
{
int i,c=0;
//获取标题信息
SD_in();
//回溯根节点初始值,调整这个值能调整回溯进展
if(!sudu_ji[0])sudu[0]=1;
i=0;
while(1)
{
//sd_print();
//Sleep(10);
if(sudu[i]<=9)
{
//回溯点取值在正常规划内
if(ok_sd())
{
//假如和剪枝条件抵触,测验下一个可用值
if(!sudu_ji[i])sudu[i]++;
continue;
}
if(i>=80)
{
//现已到了最终一个节点也便是找到了一个解先输出它
sd_print();
//然后测验找到其它的解
if(!sudu_ji[80])sudu[80]++;
c++;
if(c>=10)
{
printf(“此题解太多只输出前面10个解!”);
return 0;
}
continue;
}
//回溯点值没有发生抵触扩展他测验开端下一个节点
i++;
if(!sudu_ji[i])sudu[i]=1;
}else
{
//超越回溯点取值规划
//此回溯点已死复位
if(!sudu_ji[i])sudu[i]=0;
//退回前一回溯点
i–;
if(sudu_ji[i]) i–;//回溯后的当时回溯节点是标题现已标记过的就在往前回溯一步

if(i<0)
{
printf(“现已找出数独所有解共有:%d个解!”,c);
return 1;
}
//测验对上一回溯点进行扩展
if(!sudu_ji[i])sudu[i]++;
continue;
}
}

return 0;
}

void TuiLi::hh_init()
{
//数据初始化
int i,j;
printf(“请输入皇后问题的解题规划:”);
scanf(“%d”,&N);
printf(“”);
for(i=0;i<1024;i++)
{
hh[i]=0;
}
for(i=0;i<30;i++)
for(j=0;j<30;j++)
{
HH[i][j]=0;
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/317315.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部