重复

导航

第五章作业

1.对回溯算法的理解:

运用回溯法可以系统地搜索一个问题的所有解或任一解。

它在问题的解空间树中,按照深度优先策略,从根节点出发搜索解空间树。

当算法搜索至解空间树的任一节点时,判断该节点是否包含问题的解,如果不包含,则跳过以该节点为根的子树的搜索,逐层向其父节点回溯。

否则进入该子树,继续搜索。

回溯法适用于解组合数较大的问题。

2.“子集和”问题的解空间结构:

排列树

约束函数:

void Backtrack(int t)  
{   
    if (flag==1) return;
    for (int j=1;j<=n;j++)  
      if (!b[j]&&c-a[j]>=0)  
      {  
        if (flag==1) return;  
        c-=a[j];
        d[t]=a[j];
        b[j]=1;  
        if (c==0)  
        {  
            if (flag==0)  {
                for(int i=1;i<=t;i++){
                  cout<<d[i]<<" ";
                }  
            flag=1;  
            return;  
            }  
        }
        else Backtrack(t+1);  
        if (flag==1) return;   
        c+=a[j];
        b[j]=0;  
      }  
}  

3.遇到的问题:

约束函数的条件还不能很好地掌握

结对编程情况:

与同伴一起讨论,互相指出对方的不足之处,配合的也比以往更好了点儿,共同学习。

 

posted on 2018-12-19 21:42  重复  阅读(96)  评论(0编辑  收藏  举报