青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天空之城
new,think,program,happy to live
posts - 39,comments - 39,trackbacks - 0

【實驗目的】

學習掌握回溯算法。

?

【實驗內容】

用回溯法求解 0 1 背包問題,并輸出問題的最優解。 0 1 背包問題描述如下:

給定 n 種物品和一背包。物品 i 的重量是 Wi ,其價值為 Vi ,背包的容量是 c ,問應如何選擇裝入背包中的物品,使得裝入背包中物品的總價值最大。

?

【實驗條件】

Microsoft Visual C++ 6.0

?

【需求分析】

對于給定 n 種物品和一背包。在容量最大值固定的情況下,要求裝入的物品價值最大化。

?

【設計原理】

一、回溯法:
回溯法是一個既帶有系統性又帶有跳躍性的的搜索算法。它在包含問題的所有解的解空間樹中,按照深度優先的策略,從根結點出發搜索解空間樹。算法搜索至解空間樹的任一結點時,總是先判斷該結點是否肯定不包含問題的解。如果肯定不包含,則跳過對以該結點為根的子樹的系統搜索,逐層向其祖先結點回溯。否則,進入該子樹,繼續按深度優先的策略進行搜索。回溯法在用來求問題的所有解時,要回溯到根,且根結點的所有子樹都已被搜索遍才結束。而回溯法在用來求問題的任一解時,只要搜索到問題的一個解就可以結束。這種以深度優先的方式系統地搜索問題的解的算法稱為回溯法,它適用于解一些組合數較大的問題。

二、算法框架:

1
、問題的解空間:應用回溯法解問題時,首先應明確定義問題的解空間。問題的解空間應到少包含問題的一個(最優)解。

2
、回溯法的基本思想:確定了解空間的組織結構后,回溯法就從開始結點(根結點)出發,以深度優先的方式搜索整個解空間。這個開始結點就成為一個活結點,同時也成為當前的擴展結點。在當前的擴展結點處,搜索向縱深方向移至一個新結點。這個新結點就成為一個新的活結點,并成為當前擴展結點。如果在當前的擴展結點處不能再向縱深方向移動,則當前擴展結點就成為死結點。換句話說,這個結點不再是一個活結點。此時,應往回移動(回溯)至最近的一個活結點處,并使這個活結點成為當前的擴展結點。回溯法即以這種工作方式遞歸地在解空間中搜索,直至找到所要求的解或解空間中已沒有活結點時為止。

運用回溯法解題通常包含以下三個步驟:

1 )針對所給問題,定義問題的解空間;

2 )確定易于搜索的解空間結構;

3 )以深度優先的方式搜索解空間,并且在搜索過程中用剪枝函數避免無效搜索;

3
、遞歸回溯:由于回溯法是對解空間的深度優先搜索,因此在一般情況下可用遞歸函數來實現回溯法。

【概要設計】

0 1 背包問題是一個子集選取問題,適合于用子集樹表示 0 1 背包問題的解空間。在搜索解空間樹是,只要其左兒子節點是一個可行結點,搜索就進入左子樹,在右子樹中有可能包含最優解是才進入右子樹搜索。否則將右子樹剪去。

int c;// 背包容量

? int n; // 物品數

? int *w;// 物品重量數組

? int *p;// 物品價值數組

? int cw;// 當前重量

? int cp;// 當前價值

? int bestp;// 當前最優值

? int *bestx;// 當前最優解

? int *x;// 當前解

?

int Knap::Bound(int i)// 計算上界

void Knap::Backtrack(int i)// 回溯

?

int Knapsack(int p[],int w[],int c,int n) // Knap::Backtrack 初始化

?

【詳細設計】

#include<iostream>

using namespace std;

?

?

?

class Knap

{

friend int Knapsack(int p[],int w[],int c,int n );

?

public:

?????? void print()

?????? {

?????? ?for(int m=1;m<=n;m++)

?? {

??? cout<<bestx[m]<<" ";

?? }

?? cout<<endl;

?????? };

?

private:

? int Bound(int i);

? void Backtrack(int i);

?

? int c;// 背包容量

? int n; // 物品數

? int *w;// 物品重量數組

? int *p;// 物品價值數組

? int cw;// 當前重量

? int cp;// 當前價值

? int bestp;// 當前最優值

? int *bestx;// 當前最優解

? int *x;// 當前解

?

};

?

?

int Knap::Bound(int i)

{

?// 計算上界

?????? int cleft=c-cw;// 剩余容量

?????? int b=cp;

?????? // 以物品單位重量價值遞減序裝入物品

?????? while(i<=n&&w[i]<=cleft)

?????? {

?????? ? cleft-=w[i];

?????? ? b+=p[i];

?????? ? i++;

?????? }

?????? // 裝滿背包

?????? if(i<=n)

????????????? b+=p[i]/w[i]*cleft;

?????? return b;

}

?

?

void Knap::Backtrack(int i)

{

? if(i>n)

? {

??? if(bestp<cp)

?????? {

??? ?????? for(int j=1;j<=n;j++)

?????? ??? ?????? ?bestx[j]=x[j];

?????? ??? bestp=cp;

?????? }

?????? return;

? }

? if(cw+w[i]<=c) // 搜索左子樹

? {????????????

????? x[i]=1;

?????? ? cw+=w[i];

?????? ? cp+=p[i];

?????? ? Backtrack(i+1);

?????? ? cw-=w[i];

?????? ? cp-=p[i];

? }

?????? ? if(Bound(i+1)>bestp)// 搜索右子樹

?????? ? {

?????? ????? x[i]=0;

????????????? ? Backtrack(i+1);

?????? ? }

?

}

?

?

class Object

{

?friend int Knapsack(int p[],int w[],int c,int n);

public:

?????? int operator<=(Object a)const

?????? {

?????? ?return (d>=a.d);

?????? }

private:

?????? int ID;

?????? float d;

};

?

?

int Knapsack(int p[],int w[],int c,int n)

{

?// Knap::Backtrack 初始化

?????? int W=0;

?????? int P=0;

?????? int i=1;

?????? Object *Q=new Object[n];

?????? for(i=1;i<=n;i++)

?????? {

?????? ?Q[i-1].ID=i;

?????? ?Q[i-1].d=1.0*p[i]/w[i];

?????? ?P+=p[i];

?????? ?W+=w[i];

?????? }

?????? if(W<=c)

????????????? return P;// 裝入所有物品

?????? // 依物品單位重量排序

?????? float f;

?????? for( i=0;i<n;i++)

?????? ?for(int j=i;j<n;j++)

?????? ?{

?????? ? if(Q[i].d<Q[j].d)

?????? ? {

?????? ??? f=Q[i].d;

????????????? Q[i].d=Q[j].d;

????????????? Q[j].d=f;

?????? ? }

?

?

?????? ?}

??????

?????? Knap? K;

?????? K.p = new int[n+1];

??? K.w = new int[n+1];

?????? K.x = new int[n+1];

?????? K.bestx = new int[n+1];

?????? K.x[0]=0;

?????? K.bestx[0]=0;

?????? for( i=1;i<=n;i++)

?????? {

?????? ?K.p[i]=p[Q[i-1].ID];

?????? ?K.w[i]=w[Q[i-1].ID];

?????? }

?????? K.cp=0;

?????? K.cw=0;

?????? K.c=c;

?????? K.n=n;

?????? K.bestp=0;

?????? // 回溯搜索

?????? K.Backtrack(1);

??? K.print();

??? delete [] Q;

?????? delete [] K.w;

?????? delete [] K.p;

?????? return K.bestp;

}

?

void main()

{

?????? int *p;

?????? int *w;

??? int c=0;

?????? int n=0;

?????? int i=0;

?

?????? cout<<" 請輸入背包個數: "<<endl;

??? cin>>n;

?????? p=new int[n+1];

?????? w=new int[n+1];

?????? p[0]=0;

?????? w[0]=0;

?

?????? cout<<" 請輸入個背包的價值: "<<endl;

?????? for(i=1;i<=n;i++)

????????????? cin>>p[i];

?

?????? cout<<" 請輸入個背包的重量: "<<endl;

?????? for(i=1;i<=n;i++)

????????????? cin>>w[i];

?

?????? cout<<" 請輸入背包容量: "<<endl;

?????? cin>>c;

?

?????? cout<<Knapsack(p,w,c,n)<<endl;

?

??????

}

posted on 2006-05-12 22:47 太極虎~宏 閱讀(815) 評論(0)  編輯 收藏 引用 所屬分類: 代碼

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区四区五区黄| 亚洲欧洲一区二区三区久久| 99视频国产精品免费观看| 亚洲一区二区三区四区中文| 免费毛片一区二区三区久久久| 一本一道久久综合狠狠老精东影业| 久久久欧美一区二区| 国产精品一区二区久久国产| 亚洲国产高清aⅴ视频| 久久国产一区二区| 在线一区二区日韩| 欧美日韩综合精品| 夜夜爽99久久国产综合精品女不卡| 蜜臀久久99精品久久久久久9| 中日韩午夜理伦电影免费| 另类图片综合电影| 在线观看欧美一区| 久久天天躁夜夜躁狠狠躁2022 | 久久欧美肥婆一二区| 老司机aⅴ在线精品导航| 欧美三级视频在线| 日韩视频中文| 91久久精品国产91久久性色tv| 欧美一级专区| 国模叶桐国产精品一区| 久久久久综合| 久久久国产成人精品| 影音先锋久久精品| 嫩草成人www欧美| 美日韩精品免费| 亚洲精品一二| 日韩视频在线一区| 欧美揉bbbbb揉bbbbb| 亚洲欧美区自拍先锋| 香港久久久电影| 激情成人中文字幕| 亚洲大胆av| 欧美日韩一区二区免费在线观看| 亚洲视频999| 午夜精品久久久久久| 狠狠干综合网| 最新日韩中文字幕| 国产精品久久久久久一区二区三区 | 亚洲一级黄色| 亚洲性视频网址| 国产最新精品精品你懂的| 美日韩精品视频免费看| 欧美成人免费一级人片100| 国产精品99久久久久久宅男| 亚洲一区不卡| 1204国产成人精品视频| 日韩视频在线观看国产| 国产亚洲精品久久久久婷婷瑜伽 | 亚洲级视频在线观看免费1级| 蜜臀av性久久久久蜜臀aⅴ四虎| 蜜月aⅴ免费一区二区三区| 一区二区日韩| 亚洲欧美日韩综合aⅴ视频| 国产一区二区三区精品欧美日韩一区二区三区| 久久露脸国产精品| 欧美三级网址| 免费亚洲电影在线观看| 欧美日韩在线视频首页| 久久久噜噜噜久久人人看| 欧美激情1区| 久久久亚洲国产天美传媒修理工 | 亚洲成在线观看| 日韩视频在线观看| 亚洲国产福利在线| 欧美一区二区视频在线观看2020| 99re66热这里只有精品4| 久久看片网站| 中文欧美字幕免费| 午夜精品理论片| 亚洲精品乱码久久久久久黑人| 亚洲一区二区免费| 亚洲美女免费视频| 久久精品免费| 欧美一级二区| 欧美视频在线免费| 最新热久久免费视频| 亚洲高清免费在线| 久久国产精品一区二区三区四区 | 欧美激情在线狂野欧美精品| 国产日韩欧美二区| 一区二区三区视频免费在线观看| 91久久久一线二线三线品牌| 欧美呦呦网站| 久久国产综合精品| 国产精品―色哟哟| 亚洲美女少妇无套啪啪呻吟| 亚洲国产一二三| 老司机午夜精品视频在线观看| 久久伊伊香蕉| 韩国女主播一区| 久久精品首页| 欧美bbbxxxxx| 亚洲激情视频在线| 欧美成人蜜桃| 亚洲国产欧美不卡在线观看| 亚洲成人在线视频播放| 毛片基地黄久久久久久天堂| 老司机精品福利视频| 国产一区二区丝袜高跟鞋图片 | 欧美日韩一区综合| 亚洲精品一区二区三区四区高清| 日韩一区二区免费看| 欧美三级电影一区| 亚洲午夜小视频| 亚洲免费在线观看| 免费黄网站欧美| 欧美不卡在线| 亚洲国产一二三| 欧美成人黑人xx视频免费观看 | 久久爱www久久做| 久久精品视频免费| 黄色国产精品一区二区三区| 久久久免费观看视频| 亚洲第一色中文字幕| 亚洲视频在线观看网站| 国产精品久久婷婷六月丁香| 亚洲免费一在线| 久久综合中文字幕| 亚洲卡通欧美制服中文| 国产精品v欧美精品v日韩| 午夜在线电影亚洲一区| 老司机精品导航| 亚洲另类春色国产| 国产精品免费看| 久久人人九九| 99re这里只有精品6| 欧美在线观看一区二区| 伊人久久大香线| 欧美日韩国产色站一区二区三区| 亚洲欧美激情一区| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品日韩专区| 欧美一区二区三区另类| 久久国产精品电影| 一色屋精品视频在线看| 欧美激情综合亚洲一二区| 亚洲一级高清| 亚洲第一精品久久忘忧草社区| 亚洲一区二区三区国产| 韩国一区电影| 欧美精品九九| 久久精品视频网| 亚洲亚洲精品在线观看| 亚洲日本电影在线| 国产精品视频一| 欧美理论在线| 久久精品视频在线| 亚洲一区二区三区成人在线视频精品| 乱中年女人伦av一区二区| 亚洲无人区一区| 亚洲国产精品福利| 国产欧美一区二区精品性| 欧美激情一区| 久久精品免费观看| 亚洲特黄一级片| 亚洲欧洲在线看| 美女视频网站黄色亚洲| 欧美一区二区三区在线| 一区二区三区色| 日韩视频三区| 亚洲国产婷婷香蕉久久久久久99| 国产精品综合色区在线观看| 欧美日韩国产欧美日美国产精品| 免播放器亚洲一区| 久久免费偷拍视频| 性欧美video另类hd性玩具| 亚洲精品资源| 亚洲人成网站777色婷婷| 久久婷婷国产综合精品青草| 午夜精品免费在线| 中文av一区特黄| 一区二区三区日韩在线观看| 日韩视频中午一区| 亚洲激情视频| 亚洲黄色影院| 亚洲日本久久| 99国产精品私拍| 日韩视频一区| 一本色道久久综合亚洲精品按摩| 亚洲激情视频网| 亚洲精品一区二| 99re6热在线精品视频播放速度| 亚洲精品欧美日韩专区| 91久久精品一区二区别| 亚洲精品日韩在线观看| 亚洲美女色禁图| 一本色道久久88亚洲综合88| 欧美国产亚洲精品久久久8v| 国产精品中文字幕在线观看| 日韩视频精品| 欧美福利电影网| 你懂的一区二区| 美乳少妇欧美精品| 蘑菇福利视频一区播放| 久久综合综合久久综合|