设为首页 加入收藏

TOP

DFS(四):剪枝策略(四)
2019-07-11 12:11:16 】 浏览:345
Tags:DFS 剪枝 策略
n,0,0)) 

                { 

                   cout<<InitLen<<endl; 

                   flag=true; 

                   break; 

               } 

        } 

        if(!flag) 

            cout<<sumlen<<endl; 

        delete stick; 

        delete visit; 

    } 

    return 0; 

bool dfs(int* stick,bool* visit,int len,int InitLen,int s,int num)

   if(num==n) 

       return true; 

   int sample=-1; 

   for(int i=s;i<n;i++) 

   { 

       if(visit[i] || stick[i]==sample) 

         continue;                  //  剪枝(2)

       visit[i]=true; 

       if(len+stick[i]<InitLen) 

       { 

           if(dfs(stick,visit,len+stick[i],InitLen,i,num+1)) 

               return true; 

           else 

               sample=stick[i]; 

       } 

       else if(len+stick[i]==InitLen) 

        { 

            if(dfs(stick,visit,0,InitLen,0,num+1)) 

                return true; 

            else 

                sample=stick[i]; 

        } 

        visit[i]=false; 

        if(len==0)                // 剪枝(3)

            break;

    } 

    return false; 

}  

      2.最优性剪枝

      最优性剪枝,又称为上下界剪枝,是一种重要的剪枝策略。它记录当前得到的最优值,如果当前结点已经无法产生比当前最优解更优的解时,可以提前回溯。
      对于求最优解的一类问题

首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇对C++类的继承和派生的理解 下一篇[LGP4707] 重返现世

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目