背包问题求解.docVIP

  • 3
  • 0
  • 约1.21千字
  • 约 2页
  • 2020-06-29 发布于山西
  • 举报
A- PAGE 1 背包问题求解 算法如下: void knapsack ( int w[ ], int T, int n ) { // 已知n件物品的体积分别为 w[0], w[1], …, w[n],背包的总体积为 T, // 本算法输出所有恰好能装满背包的物品组合解 InitStack(S); k = 0; // 从第0 件物品考察起 while ( !StackEmpty(S) k n ){ while ( T 0 k n ) { if ( T - w[k] = 0 ) { // 第k件物品可选,则k入栈 Push(S,k);T-=w[k];} k ++; // 继续考察下一件物品 if ( T == 0 ) {StackTraverse(S); return 0}// 输出第一组解 Pop ( S, k ); T + = w[k]; k ++; // 退出栈顶物品 // 继续考察下一件物品 } while }// knapsack 1 写出每一次出/入栈的元素及其相应的 k+1值和T值,图示栈的变化情况,写出输出结果。 已知 int w[ ]={ 10,7,4,3,9,1,6}; T=12; S 出/入栈 k+1 T 2实现栈的基本操作 StackEmpty(S);InitStack(S) ;Pop ( S, k ) 排序 已知序列{55,12,56,33,24,70,48,92,86,33} 1 写出直接插入排序每一趟排序后的结果并标出序列的有序部分和无序部分 (非递减) 1趟: 2趟: 3趟: 2写出堆排序每一趟排序后的结果并标出序列的有序部分和无序部分,画出初始堆(建堆后的结果)。(非递减) 1趟: 2趟: 3趟: 3完成一趟直接插入排序算法 void InsertSort ( SqList L,int i) { L.r[0] = L.r[i]; for ( j=i-1; (1) ; --j ) (2) ; // 记录后移 (3) ; // 插入到正确位置 } // InsertSort

文档评论(0)

1亿VIP精品文档

相关文档