?? airport.cpp
字號:
// Airport.cpp: implementation of the Airport class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "AirportDep.h"
#include "Airport.h"
#include "Externs.h" //包含全局變量
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Airport::Airport()
{
Airport_Arr.erase(Airport_Arr.begin(),Airport_Arr.end());
Airport_Dep.erase(Airport_Dep.begin(),Airport_Dep.end());
flightArr.erase(flightArr.begin(),flightArr.end());
flightDep.erase(flightDep.begin(),flightDep.end());
for(int t=0;t<T;t++)
{
Airport_ArrFlight[t].erase(Airport_ArrFlight[t].begin(),Airport_ArrFlight[t].end());
Airport_DepFlight[t].erase(Airport_DepFlight[t].begin(),Airport_DepFlight[t].end());
}
DelayTime_Dep=0; //機場航班總的出發延誤時間段數
DelayTime_Arr=0; //機場航班總的到達延誤時間段數
DelayTime=0; //機場航班總的延誤時間段數
DelayFlight_Dep=0;
DelayFlight_Arr=0;
DelayFlight=0;
optDone=false;
}
Airport::~Airport()
{
}
void Airport::SetFlightArr(bool f) //生成到達航班信息
{
int rand1,rand2;
Flight temp,ff;
flightArr.erase(flightArr.begin(),flightArr.end());
for(int i=0;i<flight_ArrNumber;i++)
{
ff=Flight_Arr[i];
flightArr.push_back(ff);
}
if(f)
for(int j=0;j<(flight_ArrNumber*2);j++)
{
rand1=rand()%(flight_ArrNumber);
rand2=rand()%(flight_ArrNumber);
temp=flightArr[rand1];
flightArr[rand1]=flightArr[rand2];
flightArr[rand2]=temp;
}
}
void Airport::SetFlightArr(vector<Flight> f_arr) //根據已知到達航班生成到達航班信息
{
flightArr.erase(flightArr.begin(),flightArr.end());
for(int i=0;i<flight_ArrNumber;i++)
flightArr.push_back(f_arr[i]);
}
void Airport::SetFlightDep(bool f) //生成出發航班信息
{
int rand1,rand2;
Flight temp,ff;
flightDep.erase(flightDep.begin(),flightDep.end());
for(int i=0;i<flight_DepNumber;i++)
{
ff=Flight_Dep[i];
flightDep.push_back(ff);
}
if(f)
for(int j=0;j<(flight_DepNumber*2);j++)
{
rand1=rand()%(flight_DepNumber);
rand2=rand()%(flight_DepNumber);
temp=flightDep[rand1];
flightDep[rand1]=flightDep[rand2];
flightDep[rand2]=temp;
}
}
void Airport::SetFlightDep(vector<Flight> f_dep) //根據已知出發航班生成出發航班信息
{
flightDep.erase(flightDep.begin(),flightDep.end());
for(int i=0;i<flight_DepNumber;i++)
flightDep.push_back(f_dep[i]);
}
void Airport::InitialAirport(bool f) //隨機產生機場在各個時間段的容量
{
int rand1,rand2,temp;
Airport_Arr.erase(Airport_Arr.begin(),Airport_Arr.end());
Airport_Dep.erase(Airport_Dep.begin(),Airport_Dep.end());
for(int i=0;i<T;i++)
{
rand1=rand()%4;
rand1+=6;
Airport_Arr.push_back(rand1);
}
if(f)
{
for(int j=0;j<T*2;j++)
{
rand1=rand()%(T);
rand2=rand()%(T);
temp=Airport_Arr[rand1];
Airport_Arr[rand1]=Airport_Arr[rand2];
Airport_Arr[rand2]=temp;
}
}
for(i=0;i<T;i++)
{
switch(Airport_Arr[i])
{
case 6: Airport_Dep.push_back(10);
break;
case 7: Airport_Dep.push_back(9);
break;
case 8: Airport_Dep.push_back(8);
break;
case 9: Airport_Dep.push_back(6);
break;
default: Airport_Dep.push_back(10);
}
}
}
void Airport::SetAirport_Dep(int t) //設置機場某時間段的出發容量
{
switch(Airport_Arr[t])
{
case 6: Airport_Dep[t]=10;
break;
case 7: Airport_Dep[t]=9;
break;
case 8: Airport_Dep[t]=8;
break;
case 9: Airport_Dep[t]=6;
break;
default: Airport_Dep[t]=10;
}
}
void Airport::SetAirport_Arr(int t,int flightCount) //設置機場某時間段的到達容量
{
/* if(flightCount<=6)
{
Airport_Arr[t]=6;
}
else */
Airport_Arr[t]=flightCount;
}
void Airport::SetAirport_ArrFlight() //設置機場在各個時間段的到達航班
{
int num,j,t_plan,t_real,t_delay;
bool full;
for(int t=0;t<T;t++)
Airport_ArrFlight[t].erase(Airport_ArrFlight[t].begin(),Airport_ArrFlight[t].end());
for(t=0;t<T;t++) //各時間段
{
num=0; j=0; full=false;
//使到達航班放入合適的到達航班容器中
do
{
t_plan=flightArr[j].Get_Flight_Plan();
t_real=flightArr[j].Get_Flight_Real();
t_delay=flightArr[j].Get_Flight_DelayTime();
if((t_real<0)&&(t_plan+t_delay==(t+1))) //考慮航班允許的最大延誤時間
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightArr[j].Set_Flight_Delay();
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
if(!full)
{
j=0;
do
{
t_plan=flightArr[j].Get_Flight_Plan();
t_real=flightArr[j].Get_Flight_Real();
//t_delay=flightArr[j].Get_Flight_DelayTime();
if((t_real<0)&&(t_plan==(t+1)))
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
}
if(!full)
{ //盡量使該時間段的到達航班數達到該時間段的到達容量
j=0;
do
{
t_plan=flightArr[j].Get_Flight_Plan();
t_real=flightArr[j].Get_Flight_Real();
if((t_real<0) && (t_plan<(t+1)))
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
flightArr[j].Set_Flight_Delay();
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
}
/* if(!full) //使到達和出發相關
{
SetAirport_Arr(t,num); //設置t時間段的到達容量
SetAirport_Dep(t); //設置t時間段的出發容量
} */
/* if(!full) //到達和出發不相關時
{ //盡量使該時間段的到達航班數達到該時間段的到達容量
j=0;
do
{
t_real=flightArr[j].Get_Flight_Real();
t_plan=flightArr[j].Get_Flight_Plan();
if(t_real<0)
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightArr[j].Set_Flight_Delay();
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
} */
}
}
void Airport::GetAirport_ArrFlight(int t) //獲得機場在t時間段的到達航班
{
Flight ff;
vector<Flight>::iterator pos;
for(pos=Airport_ArrFlight[t].begin();pos!=Airport_ArrFlight[t].end();pos++)
{
ff=*pos;
cout<<ff.Get_Flight_Num()<<endl;
}
}
void Airport::SetAirport_DepFlight() //設置機場在各個時間段的出發航班
{
int num,j,t_plan,t_real,t_delay;
bool full;
for(int t=0;t<T;t++)
Airport_DepFlight[t].erase(Airport_DepFlight[t].begin(),Airport_DepFlight[t].end());
for(t=0;t<T;t++) //各時間段
{
num=0; j=0; full=false;
//使出發航班放入合適的出發航班容器中
do
{
t_plan=flightDep[j].Get_Flight_Plan();
t_real=flightDep[j].Get_Flight_Real();
t_delay=flightDep[j].Get_Flight_DelayTime();
if((t_real<0) && (t_plan+t_delay==(t+1))) //考慮航班允許的最大延誤時間段
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightDep[j].Set_Flight_Delay();
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
if(!full)
{
j=0;
do
{
t_plan=flightDep[j].Get_Flight_Plan();
t_real=flightDep[j].Get_Flight_Real();
if((t_real<0)&&(t_plan==(t+1)))
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
}
if(!full)
{ //盡量使該時間段的出發航班數達到該時間段的出發容量
j=0;
do
{
t_plan=flightDep[j].Get_Flight_Plan();
t_real=flightDep[j].Get_Flight_Real();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -