渡船问题!
一渡口,每条渡轮一次能装载6辆汽车过江,车辆分为客车、鲜货车和普通货车三类,规定;(1)同类汽车先到的先上船;(2)上船的优先级为:客车优先于鲜货车、鲜货车优先于普通货车;(3)每上三辆客车才允许上两辆鲜货车,然后再允许上一辆货车。若等待的客车不足三辆时,用鲜货车填补,当等待的鲜货车不足两辆时,按客车优先于普通货车的原则填补;当没有普通货车等待时,按客车优先于鲜货车的原则填补;(4)当装满六辆后则自动开船。
根据分析处理如下:
(1)汽车若渡江则根据汽车类型入队,假设:用1代表客车,2代表鲜货车,3代表普通货车。所以要设三个队列,用以区别汽车类型和到达的先后顺序,
汽车入队算法如下:
LQueqe q1,q2,q3;
InitQueqe(q1); InitQueue(q2); InitQueue(q3);
void carinque() { /* 汽车入队 */
int i,x;
scanf(“%d,%d”,&i,&x);
if(x<1 || x>3) printf(“输入汽车类型错误\n”) ;
else
{ switch(x)
{case 1: EnQueue(q1,i); break; /* 客车进q1队 */
case 2: EnQueue(q2, i); break; /* 鲜货车进q2队 */
case 3: EnQueue(q3, i); break; /* 普通货车进q2队*/
}
}
}
(2)渡轮到后按规则上船,a[6]是开进渡轮车数组,算法如下:
int carn1=carn2=carn3=0;
int Inship( )
{int n;
n=carn1+carn2+carn3;
while (!EmptyQueue(q1) || !EmptyQueue(q2) ||!EmptyQueue(q3))
{ while (!EmptyQueue(q1)&& n<6 && carn1<3)
{ a[n++]=OutQueue(q1);carn1++; }
if(n==6) { Print(a,n); return 1;} //print是一函数
while(!EmptyQueue(q2) && n<6 && carn1+carn2<5)
{a[n++]=OutQueue(q2); carn2++;}
if(n==6) { Print(a,n); return 1;}/* 满6辆则开船 */
if(!EmptyQueue(q3))
{ a[n++]=OutQueue(q3); carn3++;}
if(n==6) { Print(a,n); return 1;}
} /* While */
if(carn1+carn2+carn3<6)
printf("渡轮上有%d辆车,继续等待......\n“
,carn1+carn2+carn3);
}/* Inship */
能提供的代码以上,那位大虾能帮我完成余下的部分????先谢啦