微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 回溯算法1

回溯算法1

时间:12-01 来源:互联网 点击:

int TuiLi::go()//推理类执行入口点
{
int i,c=0;
for(i=0;i<25;i++)sz[i]=0;
//回溯根节点初始值,调整这个值能调整回溯进度
sz[0]=1;
gx();
i=0;
while(1)
{
if(sz[i]<=5)
{
//回溯点取值在正常范围内
if(OK())
{
//如果和剪枝条件冲突,尝试下一个可用值
sz[i]++;
gx();
continue;
}
if(i>=24)
{
//已经到了最后一个节点
print();
//然后尝试找到其它的解
sz[24]++;
gx();
c++;
continue;
}
//回溯点值没有产生冲突扩展他尝试开始下一个节点
i++;
sz[i]=1;
gx();

}else
{
//超过回溯点取值范围
//此回溯点已死复位
sz[i]=0;
gx();
//退回前一回溯点
i--;
if(i<0)
{
printf("已经找出推理题所有解共有:%d个解!",c);
return 1;
}
//尝试对上一回溯点进行扩展
sz[i]++;
gx();
continue;
}
}

return 0;

}
void TuiLi::sd_in()
{
int i,j,z=0;
for(i=0;i<81;i++)sudu_ji[i]=0;
for(i=0;i<81;i++)sudu[i]=0;

for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
sudu[z]=SD[i][j];
if(SD[i][j]!=0)
{
sudu_ji[z]=1;
}
z++;
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top