码迷,mamicode.com
首页 > 其他好文 > 详细

回溯法 子集树和排序树

时间:2014-06-24 21:47:06      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   com   2014   

当所给问题是从n个元素的集合S中找出满足某种性质的子集时,解空间为子集树。例如:0-1背包问题 
 
当所给问题是从n个元素的集合S中找出满足某种性质的排列时,解空间为排列树。例如:旅行售货员问题
 
 
回溯法搜索子集树算法描述为:
 
void backtrack(int  t)
 
{
     if(t>n)   
        output(x);
     else
        for(int i=0; i<=1; i++)
      {  
             x[t] = i; 
             if(constraint(t) && bound(t))     
                  backtrack(t+1);
       }  
}
     回溯法搜索排列树的描述为:
 
     void backtrack(int  t)
 
    {
       if(t>n)  
 
           output(x);
       else      
 
          for(int i=t; i<=n; i++)
          {
            swap(x[t], x[i]);
            if(constraint(t) && bound(t))      backtrack(t+1);
            swap(x[t], x[i]);       
 
         }     
 
   }
 
 
具体实例:
 
 
 
#include
#include
#define N 3
int x[N+1];
void Backtrace(int t)
{
    if(t>N)
    {
        for(int i=1;i<=N;i++)
        {
            printf("%d ",x[i]);
        }
        printf("\n");
    }
    else
    {
        for(int i=0;i<=1;i++)
        {
            x[t]=i;
            Backtrace(t+1);
        }
    }
}
int main()
{
    memset(x,0,(N+1)*sizeof(int));
    Backtrace(1);
}
--------------------------------------------------------------------------------------------------
 
 
#include
#include
#define N 3
int x[N+1]={0,1,2,3};
void swap(int &a,int &b)
{
    int temp=a;
    a=b;
    b=temp;
}
void Backtrace(int t)
{
    if(t>N)
    {
        for(int i=1;i<=N;i++)
        {
            printf("%d ",x[i]);
        }
        printf("\n");
    }
    else
    {
        for(int i=t;i<=N;i++)
        {
            swap(x[t],x[i]);
            Backtrace(t+1);
            swap(x[t],x[i]);
        }
    }
}
int main()
{
    Backtrace(1);
}
 
 
bubuko.com,布布扣

回溯法 子集树和排序树,布布扣,bubuko.com

回溯法 子集树和排序树

标签:style   blog   http   color   com   2014   

原文地址:http://www.cnblogs.com/diegodu/p/3805669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!