IDA*一般方法

 

void dfs(int tmp[],int deep)//deep表示当前深度,temp_deep表示当前限定的最大深度,超过该深度,则不必继续下去
{
    if(flag)
        return;
    if(deep+8-check(tmp)>tmp_deep)//检查当前方案是否还有必要继续下去
        return;
    if(check(tmp)==8)
    {
        flag=true;
        return;
    }
    for(int i=0;i<8;i++)
    {
        int arr1[30];
        for(int t=0;t<24;t++)
            arr1[t]=tmp[t];
        int tmp1=tmp[mov[i][0]];
        for(int t=0;t<6;t++)
        {
            arr1[mov[i][t]]=arr1[mov[i][t+1]];
        }
        arr1[mov[i][6]]=tmp1;
        way[deep]=(char)('A'+i);
        dfs(arr1,deep+1);
        if(flag)
            break;
    }
}

 

posted @ 2016-08-08 14:26  相儒以沫  阅读(210)  评论(0编辑  收藏  举报