/* 本程序
"找出8位数中所有的雷劈数"
by 陈映宏、陈淼鑫、林海鹏
Copyright (C) 2015 by 陈映宏、陈淼鑫、林海鹏,SYSU.
All rights reserved. */
#include<iostream>
#include<stack>
using namespace std;
void Reset(int in[], int n);//把车厢重新排布
void Output(int& minC, int& minB, stack<int> buffer[], int n); // 此函数把车厢从缓冲铁轨送至出轨处,同时修改minB和minC
void Put(int c, int& minC, int &minB, stack<int> buffer[], int n);//将预备轨中的车厢送入缓冲轨
int main()
{
int n;
s:
cout << "请输入车厢个数:";
cin >> n;
int *in = new int[n];//in为车厢原始顺序
cout << "请输入车厢初始排列顺序:";
for (int i = 0; i < n; i++)
cin >> in[i];
Reset(in, n);
system("pause");
delete[]in;
goto s;
return 0;
}
void Reset(int in[], int n)
{
stack<int> *buffer = new stack<int>[n-1];//新建n-1个缓冲轨,保证一定能把车厢重新重新排布
int NextOut = 1; //下一次要输出的车厢
int minC = n + 1; //缓冲铁轨中编号最小的车厢min of carriage
int minB; //minC号车厢对应的缓冲铁轨min of buffer
// 车厢重排
//cout << "重新排布先后输出车厢为:";
for (int i = 0; i < n; i++)
{
if (in[i] == NextOut)// 直接输出in[i]
{
cout << "直接送出" << in[i] << "号车厢" << endl;
NextOut++;
while ((minC == NextOut) && (NextOut<n+1)) // 从缓冲铁轨中输出
{
Output(minC, minB, buffer, n);
NextOut++;
}
}
else// 将 in[i] 送入某个缓冲铁轨
Put(in[i], minC, minB, buffer, n);
}
return;
}
void Output(int& minC, int& minB, stack<int> buffer[], int n)//调用此函数时minC为下一个要输出的数
{
// 从堆栈minB中输出编号最小的车厢minC
//cout << minC << ' ';
cout << "从" << minB << "号缓冲轨" << "送出" << minC << "号车厢" << endl;
buffer[minB].pop();
// 通过检查所有的栈顶,搜索新的 minC和minB
int temp;
minC = n + 2;
for (int i = 0; i < n - 1; i++)
{
if (!buffer[i].empty() && ((temp = buffer[i].top()) < minC))
{
minC = temp;
minB = i;
}
}
}
void Put(int c, int& minC, int &minB, stack<int> buffer[], int n)
{
// 在一个缓冲铁轨中为车厢c寻找最优的缓冲铁轨
int BestTrack = 0, // 目前最优的铁轨
BestTop = n + 1, // 最优铁轨上的头辆车厢
x;// 车厢索引
// 扫描缓冲铁轨
for (int i = 0; i < n-1; i++)
if (!buffer[i].empty()) // 铁轨 i 不空
{
x = buffer[i].top();
if (c < x && x < BestTop) // 铁轨 i 顶部的车厢编号最小
{
BestTop = x;
BestTrack = i;
}
}
else // 铁轨 i 为空
if (!BestTrack)
BestTrack = i;
// 把车厢c 送入缓冲铁轨
buffer[BestTrack].push(c);
cout << "把" << c << "号车厢" << "送进" << BestTrack << "号缓冲轨" << endl;
// 必要时修改 minC 和 minB
if (c < minC)
{
minC = c;
minB = BestTrack;
}
return ;
}
没有合适的资源?快使用搜索试试~ 我知道了~
数据结构课程设计 火火车车厢重排调度
共21个文件
tlog:6个
pdb:2个
log:2个
需积分: 19 9 下载量 146 浏览量
2015-04-06
20:03:31
上传
评论
收藏 1.75MB RAR 举报
温馨提示
#include<iostream> #include<stack> using namespace std; void Reset(int in[], int n);//把车厢重新排布 void Output(int& minC, int& minB, stack<int> buffer[], int n); // 此函数把车厢从缓冲铁轨送至出轨处,同时修改minB和minC void Put(int c, int& minC, int &minB, stack<int> buffer[], int n);//将预备轨中的车厢送入缓冲轨 int main() { int n; s: cout << "请输入车厢个数:"; cin >> n;
资源推荐
资源详情
资源评论
收起资源包目录
火车车厢重排调度.rar (21个子文件)
火车车厢重排调度
Project1
Project1.vcxproj 3KB
Project1.vcxproj.filters 944B
Debug
Project1.log 1KB
vc120.pdb 364KB
vc120.idb 251KB
3.0.obj 242KB
火车车厢重新排列.Build.CppClean.log 1KB
火车车厢重新排列.tlog
CL.write.1.tlog 512B
link.command.1.tlog 1KB
CL.read.1.tlog 6KB
火车车厢重新排列.lastbuildstate 205B
link.write.1.tlog 492B
cl.command.1.tlog 558B
link.read.1.tlog 2KB
3.0.cpp 3KB
Project1.v12.suo 21KB
Debug
火车车厢重新排列.exe 85KB
火车车厢重新排列.ilk 480KB
火车车厢重新排列.pdb 963KB
Project1.sdf 7.13MB
Project1.sln 970B
共 21 条
- 1
资源评论
LoHappen
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功