-
大小: 2KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-13
- 語言: C/C++
- 標(biāo)簽:
資源簡介
為C語言課程設(shè)計(jì)寫的基于貪心法的背包問題,包含全部4種貪心策略

代碼片段和文件信息
#include?“stdio.h“
#include?“stdlib.h“
#define?MAXITEMS?100????/*?最多有MAXITEMS件物品?*/
/*?物品的結(jié)構(gòu)體?*/
struct?item
{
????int?ItemNo;????/*?物品編號(hào)?*/
????double?Weight;?/*?物品重量?*/
????double?Value;??/*?物品價(jià)值?*/
????int?Pack;??????/*?1表示轉(zhuǎn)入背包,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:排序物品的數(shù)組?*/
/*?double?*keys:排序碼數(shù)組?*/
/*?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);
}
/*?鍵盤輸入數(shù)據(jù)?*/
void?inputData(int?*n?struct?item?items[]?double?*capacity)
{
???int?i;
???printf(“請(qǐng)輸入物品件數(shù):“);
???scanf(“%d“?n);
???for(i=0;?i<*n;?i++)
???{
???????printf(“請(qǐng)輸入第?%d?件物品的重量和價(jià)值:“?i+1);
???????scanf(“%lf%lf“?&items[i].Weight?&items[i].Value);
???????items[i].ItemNo=i+1;
???????items[i].Pack=0;
???}
???printf(“請(qǐng)輸入背包容量:“);
???scanf(“%lf“?capacity);
}
/*?從文件讀取物品數(shù)據(jù)?*/
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);
}
/*?輸出原始數(shù)據(jù)信息?*/
void?outputData(int?n?struct?item?items[]?double?capacity)
{
????int?i;
????printf(“\n共有物品?%d?件:\n“?n);
????printf(“??編號(hào)????物品重量????物品價(jià)值\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);
}
/*?輸出裝入背包的結(jié)果?*/
void?outputPack(int?n?struct?item?sitems[]?double?weight
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????10505??2015-05-20?07:43??背包問題.c
?????文件?????????30??2015-04-27?16:31??背包問題.in
-----------?---------??----------?-----??----
????????????????10535????????????????????2
評(píng)論
共有 條評(píng)論