请达人帮我看看这段程序的问题,高分
rt
#include <iostream>
#include "stdlib.h"
#include "time.h"
#define Counter 2
#define null 0
#define CloseTime 480
using namespace std;
int TotalTime,CustomerNum;
struct Event
{
int Occurtime;
int NType;
Event *next;
};
struct QueueElem
{
int Arrival;
int duration;
QueueElem *next;
};
struct QueueList
{
QueueElem *front;
QueueElem *rear;
int Count;
};
typedef Event* EventList;
typedef QueueList* QuListArray;
void InitQuList(QueueList &Queue)
{
Queue.front=new QueueElem;
Queue.rear=Queue.front;
Queue.front->Arrival=0;
Queue.front->duration=0;
Queue.front->next=null;
Queue.Count=0;
}
void GetHead(QueueList &Queue,QueueElem &en)
{
en=*Queue.front->next;
en.next=null;
}
void EnQueue(QueueList &Queue,QueueElem &en)
{
QueueElem *P=new QueueElem;
*P=en;
Queue.rear->next=P;
Queue.rear=P;
Queue.Count++;
}
void DeQueue(QueueList &Queue,int &e)
{
if(Queue.front!=Queue.rear)
{
QueueElem *P=Queue.front->next;
Queue.front->next=P->next;
if(Queue.rear==P)
{
Queue.rear=Queue.front;
}
e=P->Arrival;
delete P;
Queue.Count--;
}
}
void InitEVList(EventList &EV)
{
EV=new Event;
EV->NType=0;
EV->Occurtime=0;
EV->next=null;
}
int cmp(Event a,Event b)
{
if(a.Occurtime>b.Occurtime)
{
return 1;
}
else if(a.Occurtime<b.Occurtime)
{
return -1;
}
else
{
return 0;
}
}
void InsertEvent(EventList &EV,Event &en,int(*cmp)(Event,Event))
{
Event *P,*Q;
Event *Temp=new Event;
*Temp=en;
P=Q=EV;
P=P->next;
if(P!=null)
{
while(P!=null)
{
if(cmp(*P,en)==-1)
{
P=P->next;
Q=Q->next;
}
else if(cmp(*P,en)==1)
{
Temp->next=P;
Q->next=Temp;
return;
}
else
{
P->next=Temp;
return;
}
}
Q->next=Temp;
Temp->next=P;
}
else
{
Q->next=Temp;
Temp->next=null;
}
}
void OpenForDay(EventList &EV,QuListArray &QuPoint)
{
Event *temp;
temp=new Event;
TotalTime=0;
CustomerNum=0;
temp->NType=0;
temp->Occurtime=0;
EV->next=temp;
temp->next=null;
}
int Minimum(QuListArray &QuPoint)
{
int i=0,j=0,Min=QuPoint[0].Count;
for(i;i<Counter;i++)
{
if(Min>QuPoint[i].Count)
{
Min=QuPoint[i].Count;
j=i;
}
}
return j;
}
void CustomerArrived(EventList &EV,Event &en,QuListArray &QuPoint)
{
int i,j,t,Min;
srand(time(NULL));
i=1+rand()%30;//客户办理业务所要时间
j=1+rand()%5;
t=en.Occurtime+j;//下个客户到达时间
Event Temp={t,0,null};
if(t<CloseTime)
{
CustomerNum++;
InsertEvent(EV,Temp,cmp);
}
Min=Minimum(QuPoint);
QueueElem temp={en.Occurtime,i,null};
EnQueue(QuPoint[Min],temp);
if(QuPoint[Min].Count==1)
{
Event Temp={en.Occurtime+i,Min+1,null};
InsertEvent(EV,Temp,cmp);
}
}
int EmptyQueue(QueueList &Queue)
{
if(Queue.Count==0)
{
return 1;
}
else
{
return 0;
}
}
void CustomerDepartment(EventList &EV,Event &en,QuListArray &QuPoint)
{
int i=en.NType,arrival;
DeQueue(QuPoint[i-1],arrival);
TotalTime=TotalTime+en.Occurtime-arrival;
if(!EmptyQueue(QuPoint[i-1]))
{
QueueElem En;
GetHead(QuPoint[i-1],En);
Event temp={En.duration+en.Occurtime,i,null};
InsertEvent(EV,temp,cmp);
}
}
int EmptyEV(EventList &EV)
{
if(EV->next==null)
{
return 1;
}
else
{
return 0;
}
}
void DeFirstEV(EventList &EV,Event &en)
{
Event *temp;
temp=EV->next;
EV->next=temp->next;
en=*temp;
delete temp;
}
void main()
{
Event en;
EventList EV;
InitEVList(EV);
QueueList Q[Counter];
QuListArray QuPoint;
QuPoint=Q;
for(int i=0;i<Counter;i++)
{
InitQuList(QuPoint[i]);
}
OpenForDay(EV,QuPoint);
while(!EmptyEV(EV))
{
DeFirstEV(EV,en);
if(en.NType==0)
{
CustomerArrived(EV,en,QuPoint);
}
else
{
CustomerDepartment(EV,en,QuPoint);
}
}
cout<<TotalTime/CustomerNum<<endl;
}