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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 梁淘-5.5.txt

?? 這是很不錯的計算機算法
?? TXT
字號:
#include<fstream.h>
#include<stdlib.h>
#include<iomanip.h>

class flowshop;//預(yù)先聲明作業(yè)調(diào)度類

//堆結(jié)點生成類
class minheapnode
{  
	friend flowshop;//友元類  

	public:
		operator int() const {return bb;}
		int bb;//當(dāng)前完成時間和下界
	private:
		void init(int);//最小堆結(jié)點初始化
		void newnode(minheapnode,int,int,int,int);//生成最小堆新結(jié)點的對象賦值函數(shù)
		int s;//已安排作業(yè)數(shù)
		int f1;//機器1上最后完成時間
		int f2;//機器2上最后完成時間
		int sf2;//當(dāng)前機器2上的完成時間和
		int *x;//當(dāng)前作業(yè)調(diào)度

 };


void minheapnode::init(int n)
{  //最小堆結(jié)點初始化
	x=new int[n];//分配x數(shù)組
	for(int i=0;i<n;i++)
		x[i]=i;//x數(shù)組初始化
	s=f1=f2=sf2=bb=0;//其他成員初始化
 }


 void minheapnode::newnode(minheapnode e,int ef1,int ef2,int ebb,int n)
 {  //最小堆新結(jié)點
	 x=new int[n];
	 for(int i=0;i<n;i++)
		 x[i]=e.x[i];
	 f1=ef1;
	 f2=ef2;
	 sf2=e.sf2+f2;
	 bb=ebb;
	 s=e.s+1;
 };


 //堆排序類
 class minheap
 {  
	private:
		minheapnode *heap;//堆數(shù)組
		int currentsize;//當(dāng)前堆元素個數(shù)
		int heapsize;//堆大小
		void filterdown(int start,int endofheap);//向下調(diào)整
		void filterup(int start);//向上調(diào)整
	public:
	    minheap(int n);//構(gòu)造函數(shù)
		~minheap();//析構(gòu)函數(shù)
		int insert(minheapnode& x);//插入函數(shù)
		int removemin(minheapnode& x);//刪除最小值函數(shù)
		int isempty();//判斷空函數(shù)
		int isfull();//判斷滿函數(shù)
		void makeempty();//置空函數(shù)
 };
 
 minheap::minheap(int n)
 {  
	 heapsize=n;//設(shè)置堆大小
	 currentsize=0;//設(shè)置0表示堆中無結(jié)點
	 if(!(heap=new minheapnode[heapsize]))//分配heap數(shù)組
	 {    
		 cerr<<"insufficient memory!"<<endl;//分配不成功,退出
		 exit(-1);
	 }
 }

 minheap::~minheap()
 {  
	 delete[] heap;//釋放heap數(shù)組所占內(nèi)存
 }

 /*判斷空函數(shù)的定義*/
 int minheap::isempty()
 {  
	 return currentsize==0;
 }
 
 /*判斷滿函數(shù)的定義*/
 int minheap::isfull()
 {  
	 return currentsize==heapsize;
 }
 
 /*置空函數(shù)的定義*/ 
 void minheap::makeempty()
 {  
	 currentsize=0;//設(shè)定0表示堆中無結(jié)點
 }
 
 /*向下調(diào)整函數(shù)的定義*/
 void minheap::filterdown(int start,int endofheap)
 {  
	 int i=start,j=2*i+1;//j是i的左子女
	 minheapnode temp=heap[i];//預(yù)先保存i位置的值
	 while(j<=endofheap)
	 {    
		 if(j<endofheap&&heap[j].bb>heap[j+1].bb) j++;//選出兩子女中更小值位置
		 if(temp.bb<=heap[j].bb) break;//如果比最小值更小則不需調(diào)整
		 else     
		 {      
			 heap[i]=heap[j];//將最小值移動到根位置
			 i=j;//設(shè)置新的根位置
			 j=2*j+1;//新的左子女位置,繼續(xù)向下調(diào)整
		 }
	 }  
	 heap[i]=temp;//將初始位置的結(jié)點移動到新位置
 }

 /*向上調(diào)整函數(shù)的定義*/ 
 void minheap::filterup(int start)
 {  
	 int j=start,i=(j-1)/2;//j是i的雙親
	 minheapnode temp=heap[j];//預(yù)先保存j位置的值
	 while(j>0)  
	 {    
		 if(heap[i].bb<temp.bb) break;//如果雙親更小則不需調(diào)整
		 else    
		 {      
			heap[j]=heap[i];//將最小值移動到雙親位置上
			j=i;//設(shè)置新的子女位置
			i=(i-1)/2;//新的雙親位置,繼續(xù)向上調(diào)整
		 }  
	 }  
	 heap[j]=temp;//將初始位置的結(jié)點移動到新位置
 }
 
 /*插入函數(shù)的定義*/
 int minheap::insert(minheapnode& x)
 {  
	 if(currentsize==heapsize)//堆已滿不能插入
	 {    
		 cout<<"堆已滿"<<endl;
		 return 0;
	 }	  
	 heap[currentsize]=x;//在堆尾插入元素
	 filterup(currentsize);//向上調(diào)整為最小堆
	 currentsize++;//元素個數(shù)加1
	 return 1;
 }
 
 /*刪除最小值函數(shù)的定義*/
 int minheap::removemin(minheapnode& x)
 {  
	 if(!currentsize)//堆空不能刪除
	 {     
		 cout<<"堆已空"<<endl;
		 return 0;   
	 }  
	 x=heap[0];//堆首元素賦給x
	 heap[0]=heap[currentsize-1];//堆尾元素移動到堆首
	 currentsize--;//元素個數(shù)減1   
	 filterdown(0,currentsize-1);//向下調(diào)整為最小堆
	 return 1;
 }

 
/*交換函數(shù)的定義*/
void swap(int& a,int& b)
{  int temp;
  temp=a;  
  a=b;
  b=temp;
}
 
 /*調(diào)度類*/ 
 class flowshop
 {  
	public:    
		void bbflow(void);//優(yōu)先隊列式分支限界法求解
		flowshop();//構(gòu)造函數(shù)    
		void outputtofile();//輸出解信息
	private:
		 int bound(minheapnode,int&,int&,bool **);//計算完成時間和下界
		 void sort(void);//排序
	     int n;//批處理作業(yè)個數(shù)
	     int **m;//個作業(yè)所需的處理時間數(shù)組     
		 int **b;//個作業(yè)所需的處理時間排序后數(shù)組
	     int **a;//數(shù)組m和b的對應(yīng)關(guān)系數(shù)組(a[i][j]=k表示作業(yè)i在數(shù)組b中的位置是k,即第k個處理)
	     int *bestx;//最優(yōu)解
		 int bestc;//最小完成時間和
		 bool **y;//y[i][j]表示作業(yè)i在機器j上是否已完成
 };


 /*排序函數(shù)的定義*/
 void flowshop::sort()//按照在機器1和機器2上的完成時間進(jìn)行遞增排序
 {  
	 int i,j,k;//循環(huán)控制變量
	 int *c;  
	 if(!(c=new int[n]))//分配c數(shù)組
	 {    
		 cerr<<"insufficient memory!"<<endl;//分配不成功,退出
		 exit(-1);
	 }  
	 for(j=0;j<2;j++)//b和c數(shù)組初始化
	 {    
		 for(i=0;i<n;i++)
		 {  
			 b[i][j]=m[i][j];
			 c[i]=i;
		 }   
		 for(i=0;i<n-1;i++)//冒泡排序趟數(shù)
			 for(k=n-1;k>i;k--)
				 if(b[k][j]<b[k-1][j])
				 {   
					 swap(b[k][j],b[k-1][j]);//交換b兩元素
					 swap(c[k],c[k-1]);//同時交換c
				 }    
				 for(i=0;i<n;i++) a[c[i]][j]=i;//設(shè)置m和b的關(guān)系數(shù)組a
	 }  
	 delete[] c;//釋放c所占內(nèi)存
 }
 
 /*計算下界函數(shù)的定義*/
 int flowshop::bound(minheapnode e,int& f1,int& f2,bool **y)
 {  
	 int j,k;//循環(huán)控制變量
	 for(k=0;k<n;k++)//y數(shù)組初始化
		 for(j=0;j<2;j++)
			 y[k][j]=false;
		 for(k=0;k<=e.s;k++)//設(shè)置已完成的作業(yè)標(biāo)志
			 for(j=0;j<2;j++)
				 y[a[e.x[k]][j]][j]=true;
		 f1=e.f1+m[e.x[e.s]][0];//當(dāng)前作業(yè)完成后機器1最后完成時間
		 f2=((f1>e.f2)?f1:e.f2)+m[e.x[e.s]][1];//當(dāng)前作業(yè)完成后機器2最后完成時間
		 int sf2=e.sf2+f2;//當(dāng)前作業(yè)完成后的完成時間和
		 int s1=0,s2=0,k1=n-e.s,k2=n-e.s,f3=f2;//初始化各變量
		 for(j=0;j<n;j++)//計算s1的值(機器1沒有空閑的下界)
			 if(!y[j][0])
			 {     
				 k1--; 
				 if(k1==n-e.s-1) f3=(f2>f1+b[j][0])?f2:f1+b[j][0];
				 s1+=f1+k1*b[j][0];//累加每次作業(yè)的完成時間
			 }
		for(j=0;j<n;j++)//計算s2的值(機器2沒有空閑的下界)
		 if(!y[j][1])   
		 {  
			 k2--;
			s1+=b[j][1];//s1的值
			s2+=f3+k2*b[j][1];//累加每次作業(yè)的完成時間 
		 }  
		return sf2+((s1>s2)?s1:s2);//返回完成時間和下界
 }

 
 void flowshop::bbflow(void)
 {  
	 int i;//循環(huán)控制變量
	 sort();//對各作業(yè)在每機器上的完成時間進(jìn)行排序
	 minheap h(1000000);//創(chuàng)建大小為1000000的堆
	 minheapnode e;//創(chuàng)建堆結(jié)點對象
	 e.init(n);//初始化
	 
	 while(e.s<=n) //搜索排列空間樹
	 {    
		 if(e.s==n)//已到葉結(jié)點結(jié)束
		 {       
			 if(e.sf2<bestc)//比當(dāng)前最優(yōu)值更小則更新
			 {        
				 bestc=e.sf2;//更新最優(yōu)值
				 for(i=0;i<n;i++)//設(shè)置最優(yōu)解
					 bestx[i]=e.x[i];
			 }
			 delete [] e.x;
		 }    
		 else{//否則繼續(xù)擴展結(jié)點
			 for(i=e.s;i<n;i++)
				{        
				 swap(e.x[e.s],e.x[i]);//考慮各種排列情況
				 int f1,f2;
				 int bb=bound(e,f1,f2,y);//計算下界
				 if(bb<bestc)//下界未超過最優(yōu)值,則子樹可能含最優(yōu)解
					{          
					 minheapnode N;//分配一個堆結(jié)點
					 N.newnode(e,f1,f2,bb,n);//給結(jié)點賦值
					 h.insert(N);//將結(jié)點插入堆
					}
				 swap(e.x[e.s],e.x[i]);//還原為原來的排列
				}
			 delete [] e.x;
		 }
			 if(!h.removemin(e)) break;//堆不為空,取下一擴展結(jié)點,否則退出循環(huán)
		}
 }


 flowshop::flowshop()
 {  
	 int i,j;//循環(huán)控制變量
	 ifstream fin("input.txt",ios::nocreate);//打開輸入文件
	 fin>>n;//讀入作業(yè)個數(shù)
	 if(!(m=new int*[n]))//分配二維數(shù)組m
	 {    
		 cerr<<"insufficient memory!"<<endl;//分配不成功,退出
		 exit(-1);
	 }  
		for(i=0;i<n;i++)    
			if(!(m[i]=new int[2]))//為每個一維數(shù)組分配空間
			{      
			 cerr<<"insufficient memory!"<<endl;//分配不成功,退出
			 delete[] m;
			 exit(-1);
			}  
	if(!(b=new int*[n]))//分配二維數(shù)組b
	{    
		cerr<<"insufficient memory!"<<endl;//分配不成功,退出
		exit(-1);
	}  
		for(i=0;i<n;i++)
			 if(!(b[i]=new int[2]))//為每個一維數(shù)組分配空間
			 {     
				 cerr<<"insufficient memory!"<<endl;//分配不成功,退出
				 delete[] b;
				 exit(-1);
			 } 
	if(!(a=new int*[n]))//分配二維數(shù)組a
	{    
		cerr<<"insufficient memory!"<<endl;//分配不成功,退出
		exit(-1);
	}  
		for(i=0;i<n;i++)
			if(!(a[i]=new int[2]))//為每個一維數(shù)組分配空間
			{      
				cerr<<"insufficient memory!"<<endl;//分配不成功,退出
				delete[] a;
				exit(-1);
			}  
	if(!(y=new bool *[n]))//分配二維數(shù)組y
		{    
			cerr<<"insufficient memory!"<<endl;//分配不成功,退出
			exit(-1);
		}  
		  for(i=0;i<n;i++)
			  if(!(y[i]=new bool[2]))//為每個一維數(shù)組分配空間
			  {      
				  cerr<<"insufficient memory!"<<endl;//分配不成功,退出
				  delete[] y;
				  exit(-1);
			  }  
	if(!(bestx=new int[n]))//分配bestx數(shù)組
		{    
			cerr<<"insufficient memory!"<<endl;//分配不成功,退出
			exit(-1);
		}  
	for(i=0;i<n;i++)
		for(j=0;j<2;j++)
			fin>>m[i][j];//讀入各個作業(yè)處理時間
	fin.close();//關(guān)閉輸入文件
	bestc=32767;//設(shè)定bestc初始值
 }

void flowshop::outputtofile()
	{
 	 int i;//循環(huán)控制變量	
	ofstream out("output.txt");//創(chuàng)建輸出文件
	 out<<bestc<<endl;//輸出最小完成時間和
	 for(i=0;i<n;i++)
	 {    
		 out<<bestx[i]+1<<" ";//輸出最優(yōu)解信息
	 }  
	 out.close();//關(guān)閉輸出文件


	 delete[] bestx;//釋放bestx所占內(nèi)存
	 for(i=0;i<n;i++)//釋放二維m數(shù)組所占內(nèi)存
		 delete[] m[i];
	 delete[] m;
	 for(i=0;i<n;i++)//釋放二維b數(shù)組所占內(nèi)存
		 delete[] b[i];
	 delete[] b;
	 for(i=0;i<n;i++)//釋放二維a數(shù)組所占內(nèi)存
		 delete[] a[i];
	 delete[] a;
	 for(i=0;i<n;i++)//釋放二維y數(shù)組所占內(nèi)存
		 delete[] y[i];
	 delete[] y;
 }
 


void main(void)
{
	flowshop flow;//創(chuàng)建flowshop對象
	flow.bbflow();//進(jìn)行調(diào)度求最優(yōu)解
	flow.outputtofile();//輸出最優(yōu)解
}	

 

 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
884aa四虎影成人精品一区| 欧美成人精品二区三区99精品| 午夜欧美大尺度福利影院在线看 | 欧美日韩另类国产亚洲欧美一级| 久久精品国产**网站演员| 国产精品久久久久影视| 欧美一级在线免费| 91国偷自产一区二区开放时间| 久久 天天综合| 亚洲成人tv网| 亚洲日本va午夜在线影院| 欧美刺激午夜性久久久久久久| 91麻豆国产在线观看| 国产一区二区三区在线观看免费| 亚洲成人一二三| 国产精品久久看| 久久精品一区二区三区四区 | 国产日产欧美一区| 日韩一卡二卡三卡四卡| 91理论电影在线观看| 国产精品一区二区视频| 热久久一区二区| 性欧美大战久久久久久久久| 国产日本欧美一区二区| 精品久久久久一区二区国产| 欧美日韩视频不卡| 色成人在线视频| 91一区二区在线| 成人av在线影院| 国产999精品久久| 国产一区二区三区日韩| 丝袜亚洲另类欧美综合| 亚洲电影视频在线| 亚洲一区二区偷拍精品| 亚洲激情一二三区| 日韩美女视频一区二区| 国产精品免费aⅴ片在线观看| 国产亚洲综合av| 国产欧美一区二区精品秋霞影院| 精品国产乱码久久久久久影片| 日韩一区二区精品在线观看| 欧美一区二区三区在线电影| 欧美一区二区三区白人| 91麻豆精品国产自产在线观看一区 | 欧美日韩一本到| 欧美色网一区二区| 欧美日韩五月天| 91精品国产综合久久久久久久久久| 欧洲国产伦久久久久久久| 在线精品亚洲一区二区不卡| 91国产免费看| 5858s免费视频成人| 欧美一区二区三区四区在线观看 | 粉嫩嫩av羞羞动漫久久久 | 久久久久久久电影| 国产欧美日韩激情| 国产精品乱人伦| 亚洲码国产岛国毛片在线| 亚洲综合丝袜美腿| 青草av.久久免费一区| 精品一区二区三区免费播放 | 国产成人精品网址| 99国产精品久久久久久久久久| 色天使色偷偷av一区二区| 欧美揉bbbbb揉bbbbb| 日韩视频123| 国产丝袜在线精品| 亚洲男人的天堂在线aⅴ视频| 亚洲va韩国va欧美va精品| 久久66热re国产| 成人午夜av电影| 欧美三级在线看| 精品盗摄一区二区三区| 国产精品情趣视频| 亚洲一二三区视频在线观看| 老司机精品视频导航| aaa亚洲精品| 3d动漫精品啪啪一区二区竹菊| 26uuu国产在线精品一区二区| 中文字幕一区二区三| 婷婷国产v国产偷v亚洲高清| 国产老女人精品毛片久久| 色欧美日韩亚洲| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品久久久99| 日韩高清一区在线| 不卡的电影网站| 日韩一级大片在线| 自拍偷拍亚洲欧美日韩| 捆绑调教一区二区三区| 91网站黄www| 久久综合色婷婷| 亚洲电影中文字幕在线观看| 国内精品久久久久影院薰衣草| 日本久久电影网| 国产亚洲午夜高清国产拍精品 | 国产乱码精品一区二区三区五月婷| 91官网在线观看| 国产欧美一区二区精品性色超碰| 香蕉av福利精品导航| 丁香婷婷综合色啪| 日韩精品专区在线| 亚洲一区二区欧美激情| 国产盗摄视频一区二区三区| 51精品国自产在线| 夜夜操天天操亚洲| 99久久免费精品高清特色大片| 91麻豆精品国产91久久久更新时间 | 91网站在线观看视频| 久久久久综合网| 全部av―极品视觉盛宴亚洲| 色婷婷综合五月| 国产精品日韩成人| 黄网站免费久久| 欧美一区二区三区婷婷月色| 一区二区三区四区不卡视频| 不卡的av中国片| 国产日韩影视精品| 久久国产麻豆精品| 在线播放中文一区| 亚洲国产一区二区三区| 99精品黄色片免费大全| 亚洲国产电影在线观看| 国产盗摄精品一区二区三区在线 | 亚洲成人一区二区在线观看| 99国产精品久久久久久久久久久| 欧美激情综合五月色丁香| 国产麻豆精品视频| 亚洲精品一区二区精华| 另类综合日韩欧美亚洲| 欧美一区二区三区四区视频| 天堂va蜜桃一区二区三区漫画版| 欧美性猛交xxxx黑人交| 亚洲激情图片小说视频| 色国产综合视频| 亚洲小说春色综合另类电影| 欧美亚洲综合色| 亚洲成人在线观看视频| 欧美三级电影一区| 日韩国产精品大片| 日韩三区在线观看| 久久99精品久久久久婷婷| 精品乱码亚洲一区二区不卡| 狠狠久久亚洲欧美| 久久久99久久| 成人avav影音| 亚洲欧美日韩系列| 久久香蕉国产线看观看99| 欧美一区二区三区白人| 在线精品视频一区二区三四| 一区二区三区在线不卡| 在线影院国内精品| 亚洲国产精品一区二区久久| 欧美精品xxxxbbbb| 久久精品国产一区二区| 久久精品亚洲精品国产欧美kt∨| 国产成人综合亚洲91猫咪| 国产精品电影一区二区| 在线观看91视频| 人人狠狠综合久久亚洲| 久久这里只有精品首页| 波多野结衣在线aⅴ中文字幕不卡| 综合久久久久综合| 欧美日本视频在线| 国产一区在线不卡| 亚洲久草在线视频| 欧美日韩国产乱码电影| 精品写真视频在线观看| 国产精品成人一区二区艾草| 91国产精品成人| 激情五月激情综合网| 国产精品色哟哟| 欧美日韩国产a| 国产精品综合av一区二区国产馆| 国产精品不卡一区| 欧美精品乱人伦久久久久久| 国内一区二区视频| 亚洲女女做受ⅹxx高潮| 日韩欧美高清dvd碟片| 成人av动漫网站| 日本va欧美va精品| 国产精品精品国产色婷婷| 91精品国产手机| av电影在线观看一区| 日韩在线一区二区三区| 国产精品灌醉下药二区| 日韩精品一区国产麻豆| 91麻豆免费在线观看| 韩国av一区二区三区在线观看| 日韩理论电影院| 精品国产sm最大网站| 日本高清不卡视频| 国产在线播放一区二区三区| 一区二区三区91| 国产日产欧美一区| 欧美一区三区二区| 欧美性xxxxxx少妇| 成人高清伦理免费影院在线观看| 日本系列欧美系列| 亚洲一区二区精品3399|