• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签:

资源简介

为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


评论

共有 条评论

相关资源