亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 最大堆分支限界法解最優裝載問題.cpp

?? 算法分析中
?? CPP
字號:
#include<iostream>
#include <algorithm>
#include <deque>
using namespace std;

/*
優先隊列式分支限界法
解裝載問題的優先隊列分支限界法將活結點表存儲于一個最大優先隊列中,活結點x
在優先隊列中的定義為從根結點到結點x所相應的載重量再加上剩余集裝箱的重量之和

優先隊列中優先級最大的活結點成為下一個擴展結點
優先隊列中活結點x的優先級為x.uweight。以結點x為根的子樹中所有結點相應
的載重量與其優先級相同。
因此在優先隊列式分支限界法中,一旦有一個葉結點成為當前擴展結點
則可以斷言該葉結點所相應的解為最優解

有兩種方式記錄最優路徑
(1) 在每一個活結點中保存從解空間樹的根結點到該結點的路徑,在算法確定了
達到最優值的葉結點時,就在該葉結點處同時得到相應的最優解.
(2) 在算法的搜索過程中保存當前已經構造出的部分解空間樹
,到達最有值的葉結點時,就可以在解空間樹從該結點開始向根結點回溯
構造出相應的最優解,程序采用第二種策略。

*/
/*
堆結構:
堆就是一棵完全二叉樹
數組來存儲各個結點
數組中任一位置i上的元素,其左兒子在位置2i上,右兒子在2*i+1上,當然了存儲下標從1開始

堆序性質
在一個堆中,對于每一個結點x,x的父親中的關鍵字小于x中的關鍵字,根結點除外
*/

/*
掌握如何實現優先隊列,利用二叉堆,孩子結點都大于父親結點
*/

template<class Type>
class MaxHeap
{
	public:
		Type *H;
		int Capacity;
		int Size;
	public:
		MaxHeap(int n)
		{
			H = NULL;
			//H = (Type*)malloc( sizeof( Type ) * ( n + 1 ) );
			H = new Type[n+1];
			Capacity = n;
			Size = 0;
		};
		MaxHeap( MaxHeap& a )
		{
			//要排除自賦值的情況
			if ( this.H != a.H )
			{
				this.H = a.H;
				this.Size = a.Size;
				this.Capacity = a.Capacity;
				for( int i = 0; i < Size; ++i )
				{
					this.H[i] = a.H[size];
				}
			}
		};

		/*
		基本的堆插入操作
		為了將node插入到堆中
		首先在下一個空閑位置++Size處,創建一個空穴,否則該堆將不是完全樹
		如果x可以放在該穴中而不破壞堆的序,那么插入完成
		否則我們把空穴的父親結點上的元素移動到該穴中,這樣空穴就朝著根的方向上行一步
		繼續該過程直到x能被放入空穴為止
		*/
		void Insert( Type& node )
		{
			//插入元素的時候按照從大到順序
			for( int i = ++Size; H[ i / 2 ] < node && i != 0; i /= 2 )
			{
				H[i] = H[ i / 2 ];
			}
			//一定要注意從下標一開始的時候,添加如何進行比較才行
			H[i] = node;
			H[1].print();
			
			for( int k = 1; k <= Size; ++k )
			{
				H[k].print();
			}
			
		};

		/*
		當刪除一個最小元時
		在根結點處產生一個空穴。
		由于現在堆少了一個元素,因此堆中最后一個元素必須移動到該堆的某個地方
		如果x可以放到空穴中,那么DeleteMin完成
		否則應該將兩個兒子中較小者移入空穴
		這樣空穴就向下推了一層。重復該步驟直到x可以被放入空穴中
		*/
		void DeleteMin( Type& node )
		{
			int i,Child;
			Type MinElement,LastElement;
			node = H[1];
			LastElement = H[Size--];

			for( i = 1; i * 2 <= Size; i = Child )
			{
				Child = i * 2;
				if ( ( Child != Size && H[ Child + 1 ] > H[ Child ] ) )
				{
					Child++;
				}

				if ( LastElement < H[ Child ] )
				//找到孩子結點中最大的一個覆蓋孩子結點
				{
					H[ i ] = H[ Child ];      
				}
				else
				{
					break;
				}
			}
			//same to H[ Child ] = LastElement
			H[ i ] = LastElement;
		};
};

template< class Type > class HeapNode;
class bbnode
{
	friend void AddLiveNode( MaxHeap< HeapNode<int> >& H,
							 bbnode * E,
							 int wt,
							 bool ch,
							 int lev
							);
	friend int MaxLoading( int *w,int c,int n,int *best );
public:
	bbnode()
	{
		//cout<<"bbnode constructor"<<endl;
		parent = 0;
		LChild = 0;
	};

	bbnode( bbnode& a )
	{
		parent = a.parent;
		LChild = a.LChild;
	};

	bbnode& operator=(bbnode& a)
	{
		cout<<"copy bbnode"<<endl;
		parent = a.parent;
		LChild = a.LChild;
		return *this;
	};

public:
	bbnode *parent;
	//指向父結點的指針
	bool LChild;
	//左兒子結點標志
};

template< class Type >
class HeapNode
{
	friend void AddLiveNode( MaxHeap< HeapNode< Type > > &H,
							 bbnode* E,
							 Type wt,
							 bool ch,
							 int lev );
	friend Type MaxLoading( Type* w,Type c,int n,int*  best );
public:
	operator Type() const
	{
		return uweight;
	};
	HeapNode()
	{
		ptr = new bbnode();
		uweight = 1000;
		level = 0;
	};

	HeapNode( HeapNode& a )
	{
		if ( ptr != a.ptr && ptr != NULL )
		{
			ptr->parent = a.ptr->parent;
			ptr->LChild = a.ptr->LChild;
		}
		uweight = a.uweight;
		level = a.level;
	};
	HeapNode& operator=(const HeapNode& a)
	{
		if ( ptr != a.ptr && ptr != NULL )
		{
			ptr->parent = a.ptr->parent;
			ptr->LChild = a.ptr->LChild;
		}
		uweight = a.uweight;
		level = a.level;
		return *this;
	};

	bool operator <( HeapNode& a ) const
	{
		return uweight < a.uweight;
	};

	bool operator >( HeapNode& a ) const
	{
		return uweight > a.uweight;
	};
	void print()
	{
		//cout<<"ptr->LChild = "<<ptr->LChild<<endl;
		//cout<<"uweight = "<<uweight<<endl;
	}
private:
	bbnode* ptr;
	//指向活結點在子集樹中相應結點的指針
	Type uweight;
	//活結點優先級(上界)
	int level;
	//活結點在子集樹中所處的層序號
};

template< class Type >
void AddLiveNode( MaxHeap< HeapNode< Type > >&H,
				  bbnode *E,
				  Type wt,
				  bool ch,
				  int lev )
{
	//將活結點加入到表示活結點的優先隊列的最大堆H中
	bbnode *b = new bbnode;
	b->parent = E;
	b->LChild = ch;
	HeapNode< Type > N;
	N.uweight = wt;
	N.level = lev;
	N.ptr = b;
	H.Insert( N );
}

template< class Type >
Type MaxLoading( Type w[],Type c,int n,int *bestx )
{
	MaxHeap< HeapNode< Type > > H(10);
	Type * r = new Type[n+1];
	r[n] = 0;
	for( int j = n - 1; j > 0; --j )
	{
		r[j] = r[j+1] + w[j+1];
	}
	//初始化
	int i = 1;
	//當前擴展結點所處的層
	bbnode *E = 0;
	//當前擴展結點
	Type Ew = 0;
	//擴展結點所相應的載重量
	//搜索子集空間樹
	while( i != n + 1 ) 
	{
		cout<<"i = "<<i<<endl;
		if ( Ew + w[i] <= c )
		{
			//cout<<"Ew + w[i] = "<<Ew+w[i]<<endl;
			//cout<<"uweight = "<<Ew + w[i] + r[i]<<endl;
			AddLiveNode( H,E,Ew + w[i] + r[i],true,i + 1 );
		}
		
		AddLiveNode( H,E,Ew + r[i],false,i + 1 );
		
		HeapNode< Type > N;
		H.DeleteMin( N );
		i = N.level;
		E = N.ptr;
		Ew = N.uweight - r[i-1];
	}
	for( j = n; j > 0; --j )
	{
		bestx[j] = E->LChild;
		E = E->parent;
		cout<<"bestx["<<j<<"] = "<<bestx[j]<<endl;
	}
	cout<<Ew<<endl;
	return Ew;
}

int main()
{
	//HeapNode<int> node;
	int a[4] = 
	{
		0,10,30,33
	};
	int c = 50;
	int b[4] = {0,0,0,0};
	MaxLoading<int>(a,50,3,b);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久精品一区二区| 日韩一区日韩二区| 日韩黄色免费电影| 欧美人xxxx| 加勒比av一区二区| 久久视频一区二区| 成人禁用看黄a在线| 亚洲人妖av一区二区| 国内欧美视频一区二区| 久久精品视频网| 色域天天综合网| 午夜精品福利一区二区蜜股av| 日韩欧美国产综合| 97精品国产97久久久久久久久久久久| 亚洲国产日韩a在线播放性色| 9191精品国产综合久久久久久 | 国产一区不卡精品| 亚洲女与黑人做爰| 一区二区三区视频在线看| 26uuu欧美日本| 久久精品一区四区| 国产精品久久久久久久久果冻传媒 | 91丨porny丨中文| 日韩中文字幕不卡| 精品一区二区综合| 99在线精品观看| 国产精品一区免费视频| 天堂va蜜桃一区二区三区| 蜜乳av一区二区| 亚洲国产另类av| 蜜臀av国产精品久久久久| 经典三级一区二区| 91在线porny国产在线看| 欧美日韩一区二区三区不卡| 97se狠狠狠综合亚洲狠狠| 欧美日韩一区二区三区四区五区| 日韩一区二区三区视频在线| 一本久久a久久精品亚洲| 国产无一区二区| 亚洲黄色小说网站| 综合分类小说区另类春色亚洲小说欧美 | 亚洲123区在线观看| 亚洲欧美国产三级| 美女网站在线免费欧美精品| 成人sese在线| 日韩免费电影网站| 亚洲综合免费观看高清完整版在线| 亚洲视频免费在线| 精品一区二区三区av| 欧美最新大片在线看| 欧美三级一区二区| 中文一区二区在线观看| 国产色91在线| 男人的j进女人的j一区| 久久精品久久精品| 国精产品一区一区三区mba桃花| 色综合久久精品| 久久蜜臀精品av| 国产午夜精品理论片a级大结局| 亚洲电影视频在线| 色欧美日韩亚洲| 国产精品美女久久久久aⅴ国产馆| 国产精品久久久久久久久动漫 | 国产精选一区二区三区| 3d动漫精品啪啪| 亚洲成人av一区| 在线观看日韩毛片| 樱桃国产成人精品视频| 成人一区二区三区在线观看| 97久久超碰精品国产| 中文欧美字幕免费| 国产自产视频一区二区三区| 欧美一区二区免费| 国产日产亚洲精品系列| 亚洲欧美另类小说视频| 99久久精品免费| 国产精品毛片久久久久久久| 岛国精品一区二区| 欧美国产激情二区三区| 成人黄色小视频| 国产精品国产自产拍在线| 成人av电影免费在线播放| 国产精品网曝门| 91视频观看免费| 亚洲综合免费观看高清完整版| 日本道色综合久久| 亚洲一区电影777| 欧美日韩和欧美的一区二区| 三级久久三级久久| 日韩视频在线你懂得| 久久99精品网久久| 欧美国产乱子伦| 91久久国产综合久久| 亚洲h动漫在线| 777亚洲妇女| 国产精品原创巨作av| 中文一区一区三区高中清不卡| 99re视频精品| 日本免费新一区视频| 99精品黄色片免费大全| 亚洲自拍偷拍av| 日韩女同互慰一区二区| 成人午夜视频福利| 亚洲一区在线电影| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91免费版在线看| 午夜不卡在线视频| 久久久精品黄色| 欧美亚洲日本一区| 亚洲日本va午夜在线电影| 欧美日韩国产综合一区二区三区| 麻豆极品一区二区三区| 综合久久一区二区三区| 91精品福利在线一区二区三区 | 青娱乐精品视频| 国产精品久久久久久亚洲伦 | 久久久久久久久岛国免费| 成人免费毛片高清视频| 日韩主播视频在线| 精品国产乱码久久久久久久| 欧美a级理论片| 国产精品成人一区二区三区夜夜夜| 欧美日韩亚洲综合在线| www.成人网.com| 精品一区二区国语对白| 亚洲一区二区偷拍精品| 欧美激情中文不卡| 日韩欧美中文一区二区| 色国产综合视频| 国产99久久久国产精品| 亚洲欧洲av在线| 精品人在线二区三区| 激情久久五月天| 午夜不卡在线视频| 亚洲精品高清在线观看| 国产亚洲精久久久久久| 日韩无一区二区| 欧美一区欧美二区| 欧美日韩国产综合一区二区| 91亚洲国产成人精品一区二三| 国产乱一区二区| 久久99久久99| 免费观看在线色综合| 午夜久久久久久| 亚洲高清免费观看| 一区二区三区免费观看| 亚洲欧美日韩电影| 成人免费在线视频| 国产精品久久久久一区二区三区共 | 中文字幕亚洲区| 国产精品午夜在线| 国产精品久久久久久久岛一牛影视| 久久综合九色综合97婷婷女人 | 午夜精品影院在线观看| 亚洲免费av高清| 亚洲精品欧美专区| 亚洲人成小说网站色在线| 国产精品久久久久久久久免费相片| 亚洲国产精品成人久久综合一区 | 国产suv一区二区三区88区| 久久国产精品色| 久久97超碰国产精品超碰| 美腿丝袜亚洲一区| 久久www免费人成看片高清| 日本成人在线电影网| 另类的小说在线视频另类成人小视频在线| 午夜av区久久| 免费欧美日韩国产三级电影| 美女视频第一区二区三区免费观看网站 | 国产成人精品免费| 日韩和欧美的一区| 精品一区免费av| 不卡一区二区在线| 在线欧美一区二区| 91精品一区二区三区久久久久久| 欧美videos中文字幕| 国产午夜精品久久久久久久| 亚洲三级在线免费观看| 婷婷开心激情综合| 国产在线乱码一区二区三区| 成人一区在线观看| 欧美羞羞免费网站| 久久精品亚洲国产奇米99| 亚洲视频狠狠干| 日本不卡中文字幕| 成人一级片网址| 在线成人av影院| 欧美日韩在线播放一区| 精品噜噜噜噜久久久久久久久试看| 国产三级精品三级在线专区| 亚洲欧美电影院| 国内精品国产成人国产三级粉色 | 亚洲国产视频直播| 国产乱码字幕精品高清av | 夫妻av一区二区| 8v天堂国产在线一区二区| 国产精品乱码妇女bbbb| 日本不卡中文字幕| 在线观看av一区二区| 国产亚洲综合在线|