标题:利用栈的问题解决车厢调度问题
只看楼主
刘菲菲
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-30
 问题点数:0 回复次数:0 
利用栈的问题解决车厢调度问题
Railroad(int p[],int n,int k)
{
∥k个缓冲铁轨,车厢初始排序为p[1:n]
∥如果重排成功,返回1,否则返回0
∥创建与缓冲铁轨对应的堆栈
LinkedStack<int>*H;
H=new LinkedStack<int>[k+1];
int NowOut=1; ∥下一次要输出的车厢
int minH=n+l; ∥缓冲铁轨中编号最小的车厢
int minS; ∥minH号车厢对应的缓冲铁轨
∥车厢重排
for(int i=1;i<=n;i++)
if(p[i]==NowOut){∥直接输出t
printf("Move car %d from input to output.\\n",p[i]);
NowOut++;
∥从缓冲铁轨中输出
while(minH==NowOut){
Output(minH,minS,H,k,n);
NowOut++;
}
}
else{ ∥将p[i]送入某个缓冲铁轨
if(!Hold(p[i],minH,minS,H,k,n))
return 0;
}
return 1;
}
下面分别给出了Railroad中所使用的函数Output和Hold。Output用于把一节车厢从缓冲铁轨送至出轨处,它同时将修改minS和minH。函数Hold根据车厢分配规则把车厢c送入某个缓冲铁轨,必要时,它也需要修改minS和minH。
void Output(int& minH,int& minS,LinkedStack<int>H[],int k,int n)
{
∥把车厢从缓冲铁轨送至出轨处,同时修改minS和minH
int c;∥车厢索引
∥从堆栈minS中删除编号最小的车厢minH
H[minS].Delete(c);
printf("Move car %d from holding track %d to output.\\n",minH,minS);
∥通过检查所有的栈顶,搜索新的minH和minS
minH=n+2;
for(int i=1;i<=k;i++)
if(!H[i].IsEmpty()&&(c=H[i].Top())<minH){
minH=c;
minS=i;
}
}                                         
搜索更多相关主题的帖子: 问题解决 车厢 
2010-05-21 17:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-307626-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.064534 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved