資料結構 棧與佇列 (C語言)揹包問題,遞迴

2021-09-25 20:25:21 字數 1062 閱讀 1979

乙個簡化的揹包問題:乙個揹包能裝為 總重量為 t ,現有 n  個物件,其重量分別為(w 1 、 、w 2 、 、… 、w n )。問能否從這 n  個物件中挑選若干個物件放入揹包為 中,使其總重量正好為 t  ?若有解則給出全部解,否則輸出無解。

#includeint x=0,y=0;

void knapsack(int weight,int a,int number,int solution);

int main(void)

,solution[30]=;

printf("請輸入揹包裝載量和物品個數:\n");

scanf("%d %d",&weight,&number);

printf("請輸入各物品的重量:\n");

for(i=0;i < number;++i)

scanf("%d",&thing[i]);

i=0;

knapsack(weight,thing,i,solution);

if(!x) printf("無解!!!");

return 0;

} void knapsack(int weight,int thing,int i,int solution)

printf("\n");

y=0;

return;

} if(weight<0||thing[0]==0) return;

knapsack(weight,&thing[1],i,solution);

solution[i]=thing[0];

knapsack(weight-thing[0],&thing[1],++i,solution);

}

回溯法是一種滿足一定條件的窮舉

遞迴是程式設計中一種強有力的工具。下面三種情況可用遞迴解決:

1、有些數學函式是遞迴定義的,對其求解可用遞迴;

2、有些資料結構具有遞迴特性,對其操作可用遞迴;

3、有些問題的解決方法用遞迴描述,對其求解也可用遞迴;

資料結構 棧與佇列(C語言)

2.迴圈佇列的實現 總結本文就介紹了資料結構中兩大基礎儲存結構,棧與佇列的基礎內容。棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成...

(C語言)資料結構 佇列 棧

12 佇列 queue 入隊 put 出對get 1 2 file queue linkedlist.c 3 4 佇列 queue 5 入隊 put 放在鍊錶尾部,並更新指向鍊錶尾部的指標tail 6 出隊 get 返回並刪除鍊錶頭部節點,並更新指向鍊錶頭部的指標head 7 8 9 include...

C語言資料結構 棧 佇列

ifndef zydl h define zydl h include head.h define stack int size 100 define stackincrement 10 define duqueue max size 10 define maxqsize 100 typedef i...