贪心算法c语言部分背包,c语言背包问题_背包问题贪心算法_背包问题 贪心算法(13)...

for iß1 to n do //将所有结点标记为未访问//

repeat

for i

if visited(i)=0 then ⑵ endif

repeat

end bft

2.找一个图的所有m—着色方案

procedure mcoloring(k)

//这是图着色的一个递归回溯算法。图g用它的布尔邻接矩阵graPh(1:n,1:n)表示。它计算并打印出符合以下要求的全部解,把整数1,2,…,m分配给图中各个结点且使相邻近的结点的有不同的整数。k是下一个要着色结点的下标。//

global integer m,n,x(1:n)boolean graPh(1;n,1:n)

integer k

loop//产生对x(k)所有的合法赋值。//

call nextvalue(k)。//将一种合法的颜色分配给x(k)//

if ⑴ then exit endif //没有可用的颜色了//

if ⑵

then print(x) //至多用了m种颜色分配给n个结点//

else callmcoloring

endif

repeat

end mcoloring

三、问答题

1.二分查找的思想是什么?

2.请用递归方法写出归并排序法的主要思想和算法。

3.已知如下多段图,请用动态规划方法的向后处理法写出求解此问题的递推公式并完成对各结点的计算。

4. 最小自然数:求具有下列两个性质的最小自然数n:

(1)n的个位数是6;

(2)若将n的个位数移到其余各位数字之前,所得的新数是n的4倍。

提示:仍用穷举法寻找,当找到一个符合条件者便停止。“找到便停止”的重复,宜采用repeat-until循环。

5. 以二叉链表为存储结构,分别写出求二叉树结点总数及叶子总数的算法。

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/tongxinshuyu/article-23877-13.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
背包问题是一个经典的动态规划问题,贪心算法并不能得到最优解。但是可以使用贪心算法得到近似最优解。以下是背包问题贪心算法C语言代码: ```c #include <stdio.h> #define MAX 100 // 背包最大容量 // 物品结构体 struct item { int weight; // 重量 int value; // 价值 }; // 按照单位价值从大到小排序 void sort(struct item items[], int n) { int i, j; struct item temp; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (items[i].value / items[i].weight < items[j].value / items[j].weight) { temp = items[i]; items[i] = items[j]; items[j] = temp; } } } } // 计算最大价值 int knapsack(struct item items[], int n, int capacity) { sort(items, n); // 按照单位价值从大到小排序 int i, value = 0; for (i = 0; i < n; i++) { if (items[i].weight <= capacity) { capacity -= items[i].weight; value += items[i].value; } else { value += items[i].value * capacity / items[i].weight; break; } } return value; } int main() { struct item items[] = {{10, 60}, {20, 100}, {30, 120}}; // 物品数组 int n = sizeof(items) / sizeof(items[0]); // 物品个数 int capacity = 50; // 背包容量 int max_value = knapsack(items, n, capacity); printf("Maximum value: %d\n", max_value); return 0; } ``` 该算法首先按照单位价值从大到小排序,然后依次选择单位价值最大的物品放入背包中,直到背包无法再放下物品为止。如果当前物品不能完全放入背包中,则只放入一部分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值