第五章作业
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.遇到的问题:
约束函数的条件还不能很好地掌握
结对编程情况:
与同伴一起讨论,互相指出对方的不足之处,配合的也比以往更好了点儿,共同学习。