资源简介
为C语言课程设计写的基于贪心法的背包问题,包含全部4种贪心策略
代码片段和文件信息
#include “stdio.h“
#include “stdlib.h“
#define MAXITEMS 100 /* 最多有MAXITEMS件物品 */
/* 物品的结构体 */
struct item
{
int ItemNo; /* 物品编号 */
double Weight; /* 物品重量 */
double Value; /* 物品价值 */
int Pack; /* 1表示转入背包,0表示不装入背包 */
};
/* 快速排序:交换 */
void swap(struct item *item1 struct item *item2 double *key1 double *key2)
{
struct item it;
double t;
it=*item1 *item1=*item2 *item2=it;
t=*key1 *key1=*key2 *key2=t;
}
/* 快速排序:划分 */
int partition(struct item *items double *keys int l int r char sortType)
{
int i=lj=rk;
if (sortType==‘A‘)
{
while(i {
while(keys[i] if (i while(keys[i] if (i }
} else if (sortType==‘D‘) {
while(i {
while(keys[i]>keys[j]) i++;
if (i while(keys[i]>keys[j]) j--;
if (i }
}
}
/* 快速排序 */
/* struct item *items:排序物品的数组 */
/* double *keys:排序码数组 */
/* int l int r:排序的氛围 */
/* char sortType:‘A‘表示升序,‘D‘表示降序 */
void quickSort(struct item *items double *keys int l int r char sortType)
{
int p; /* 分割位置 */
p=partition(items keys l r sortType);
if (l if (r>p+1) quickSort(items keys p+1 r sortType);
}
/* 键盘输入数据 */
void inputData(int *n struct item items[] double *capacity)
{
int i;
printf(“请输入物品件数:“);
scanf(“%d“ n);
for(i=0; i<*n; i++)
{
printf(“请输入第 %d 件物品的重量和价值:“ i+1);
scanf(“%lf%lf“ &items[i].Weight &items[i].Value);
items[i].ItemNo=i+1;
items[i].Pack=0;
}
printf(“请输入背包容量:“);
scanf(“%lf“ capacity);
}
/* 从文件读取物品数据 */
int inputFile(int *n struct item items[] double *capacity)
{
int i;
FILE *fp;
fp=fopen(“背包问题.in“ “r“);
if (!fp)
{
printf(“\n无法打开密码文件!\n“);
return -1;
}
fscanf(fp “%d“ n);
for(i=0; i<*n; i++)
{
fscanf(fp “%lf%lf“ &items[i].Weight &items[i].Value);
items[i].ItemNo=i+1;
items[i].Pack=0;
}
fscanf(fp “%lf“ capacity);
fclose(fp);
}
/* 输出原始数据信息 */
void outputData(int n struct item items[] double capacity)
{
int i;
printf(“\n共有物品 %d 件:\n“ n);
printf(“ 编号 物品重量 物品价值\n“);
printf(“--------------------------------\n“);
for(i=0; i printf(“%6d%12.2lf%12.2lf\n“ items[i].ItemNo items[i].Weight items[i].Value);
printf(“--------------------------------\n“);
printf(“背包容量:%.2lf\n“ capacity);
}
/* 输出装入背包的结果 */
void outputPack(int n struct item sitems[] double weight
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10505 2015-05-20 07:43 背包问题.c
文件 30 2015-04-27 16:31 背包问题.in
----------- --------- ---------- ----- ----
10535 2
- 上一篇:C语言学生通讯录管理系统
- 下一篇:数据结构C语言版期末总复习题
评论
共有 条评论