數據結構-背包問題4頁_第1頁
數據結構-背包問題4頁_第2頁
數據結構-背包問題4頁_第3頁
數據結構-背包問題4頁_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、背包問題的求解1.問題描述 假設有一個能裝入總體積為T的背包和n件體積分別為w1,w2,wn的物品,能否從n件物品中挑選若干件恰好裝滿背包,即使w1+w2+wm=T,要求找出所有滿足上述條件的解。 例如:當T=10,各件物品的體積1,8,4,3,5,2時,可找到下列4組解: (1,4,3,2) (1,4,5) (8,2) (3,5,2)。2.實現提示 可利用回溯法的設計思想來解決背包問題。首先,將物品排成一列,然后,順序選取物品裝入背包,若已選取第i件物品后未滿,則繼續(xù)選取第i+1件,若該件物品“太大”不能裝入,則棄之,繼續(xù)選取下一件,直至背包裝滿為止。 如果在剩余的物品中找不到合適的物品以填

2、滿背包,則說明“剛剛”裝入的物品“不合適”,應將它取出“棄之一邊”,繼續(xù)再從“它之后”的物品中選取,如此重復,直到求得滿足條件的解,或者無解。 由于回溯求解的規(guī)則是“后進先出”,自然要用到“?!?。 進一步考慮:如果每件物品都有體積和價值,背包又有大小限制,求解背包中存放物品總價值最大的問題解-最優(yōu)解或近似最優(yōu)解。3 題目源代碼#define maxsize 1024#define null 0#include"stdio.h"#include"conio.h"#include"stdio.h"typedef struct int la

3、st; int datamaxsize;seqlist; /定義順序表結構體typedef struct int top; int sum; int datamaxsize;seqstack; /定義棧結構體seqstack *init_seqstack() seqstack *s; s=new seqstack; if(!s) printf("空間不足"); return null; else s->top=-1; s->sum=0; return s; /棧初試化int empty_seqstack(seqstack *s) if (s->top=-1

4、) return 1; else return 0; /判斷空棧int push_seqstack(seqlist *l,int i,seqstack *s) /入棧 if(s->top=maxsize-1) return 0; else s->top+; s->datas->top=i; /順序表中第i 個元素,i 入棧 s->sum=s->sum+l->datai; /棧中sum加和! return 1; int pop_seqstack(seqlist *l,seqstack *s,int *x) /出棧 if(empty_seqstack(s)

5、 return 0; else *x=s->datas->top; s->sum=s->sum-l->datas->datas->top; s->top-; return 1; seqlist *init_seqlist() seqlist *l; int x=1; l=new seqlist; l->last=0; printf("-n請依次輸入個物品的大小,輸入0結束。n-n"); scanf("%d",&x); while(x!=0) l->datal->last=x; l-

6、>last+; scanf("%d",&x); return l;/*創(chuàng)建數組,儲存物品體積*/void knapsk(int n,seqlist *l) seqstack *s; int flag=1; int i=0; int t; s=init_seqstack(); /初始化棧命名為S while(flag!=0) while(i<=l->last) push_seqstack(l,i,s); if(s->sum=n) printf("-n可行的解是:"); for(t=0;t<=s->top;t+) printf("%d ",l->datas->datat); printf("n"); pop_seqstack(l,s,&i); i+; else if(s->sum>n) pop_seqstack(l,s,&i); i+; else i+; while(i=l->last+1) flag=pop_seqstack(l,s,&i);i+;if(flag=0)printf("-n執(zhí)行完畢"); int main() int n; seqlist *l; prin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論