新聞中心

回溯算法1

作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

for(i=0;i<5;i++)
{
if(Fz[i].yp==1){
if(i==0)if(Fz[1].yl!=5&&Fz[1].cw!=0) return 1;
if(i==4)if(Fz[3].yl!=5&&Fz[3].cw!=0) return 1;
if((Fz[i].yp==1)&&((Fz[i-1].yl!=5&&Fz[i-1].yl!=0)&&(Fz[i+1].yl!=5&&Fz[i+1].yl!=0))) return 1;
}
}
//抽Blends香煙的人有一個喝水的鄰居
return 0;
}

int TuiLi::go()//推理類執(zhí)行入口點
{
int i,c=0;
for(i=0;i<25;i++)sz[i]=0;
//回溯根節(jié)點初始值,調(diào)整這個值能調(diào)整回溯進度
sz[0]=1;
gx();
i=0;
while(1)
{
if(sz[i]<=5)
{
//回溯點取值在正常范圍內(nèi)
if(OK())
{
//如果和剪枝條件沖突,嘗試下一個可用值
sz[i]++;
gx();
continue;
}
if(i>=24)
{
//已經(jīng)到了最后一個節(jié)點
print();
//然后嘗試找到其它的解
sz[24]++;
gx();
c++;
continue;
}
//回溯點值沒有產(chǎn)生沖突擴展他嘗試開始下一個節(jié)點
i++;
sz[i]=1;
gx();

}else
{
//超過回溯點取值范圍
//此回溯點已死復(fù)位
sz[i]=0;
gx();
//退回前一回溯點
i--;
if(i<0)
{
printf("已經(jīng)找出推理題所有解共有:%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++;
}
}


上一頁 1 2 下一頁

評論


技術(shù)專區(qū)

關(guān)閉