乙個簡化的揹包問題:乙個揹包能裝為 總重量為 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...