C语言贪心算法货物装载
时间: 2023-12-03 12:40:25 浏览: 108
C语言贪心算法可以用于解决货物装载问题。货物装载问题是指在给定的容量下,如何尽可能多地装载货物。下面是一个使用贪心算法解决货物装载问题的示例代码:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sort(int w[], int v[], int n) {
// 冒泡排序,按照单位重量的价值从大到小排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if ((double)v[j] / w[j] < (double)v[j + 1] / w[j + 1]) {
swap(&w[j], &w[j + 1]);
swap(&v[j], &v[j + 1]);
}
}
}
}
double knapsack(int w[], int v[], int n, int c) {
sort(w, v, n); // 按照单位重量的价值从大到小排序
double totalValue = 0.0; // 总价值
int i;
for (i = 0; i < n; i++) {
if (w[i] > c) {
break;
}
totalValue += v[i];
c -= w[i];
}
if (i < n) {
totalValue += (double)v[i] / w[i] * c;
}
return totalValue;
}
int main() {
int w[] = {35, 30, 60, 50, 40, 10, 25};
int v[] = {10, 40, 30, 50, 35, 40, 30};
int n = sizeof(w) / sizeof(w[0]);
int c = 150;
double totalValue = knapsack(w, v, n, c);
printf("Total value: %f\n", totalValue);
return 0;
}
```
该算法的思路是按照单位重量的价值从大到小排序,然后依次选择单位重量价值最大的物品,直到装满为止。如果最后一个物品不能完全装入,则按照比例计算其价值。
阅读全文