更新时间2019-08-08 06:35:06
#include <iostream>
#include <stack>
using namespace std;
// 定义全局变量
stack<int> *track; // 缓冲轨道数组
int numberOfCars; // 车厢数
int numberOfTracks; // 缓冲轨道数
int rightcar; // 在缓冲轨道中编号符合输出的车厢
int itsTrack; // 停靠着rightcar的缓冲轨道
int outputorder[];
for(int i=0; i<10; i++)
{
if(i=0&&outputorder[i]=1)
{
outputorder[]={1,1,1,1,1,3,3,3,3,3};
}
if(i=0&&outputorder[i]=2)
{
if(i=3&&outputorder[i]=4)
{
outputorder[]={2,2,2,4,4,4,5,5,5,5};
}
if(i=3&&outputorder[i]=6)
{
outputorder[]={2,2,2,6,6,6,6,7,7,7};
}
}
if(i=0&&outputorder[i]=5)
{
outputorder[]={5,5,5,5,7,7,7,7,7,7};
}
if(i=0&&outputorder[i]=7)
{
outputorder[]={6,6,6,6,7,7,7,7,7,7};
}
}
int train;
if(outputorder[]={1,1,1,1,1,3,3,3,3,3})
{
train=1;
}
if(outputorder[]={2,2,2,4,4,4,5,5,5,5})
{
train=2;
}
if(outputorder[]={2,2,2,6,6,6,6,7,7,7})
{
train=3;
}
if(outputorder[]={5,5,5,5,7,7,7,7,7,7})
{
train=4;
}
if(outputorder[]={6,6,6,6,7,7,7,7,7,7})
{
train=5;
}
// 将rightcar从缓冲轨道移到出轨道
void outputFromHoldingTrack()
{
// 从itsTrack中删除rightcar
track[itsTrack].pop();
cout<<"Move car "<< rightCar <<" from holding track "<<itsTrack<<" to output track"<<endl;
// 检查所有栈的栈顶,寻找rightcar和它所属的栈itsTrack
rightCar = numberOfCars + 2;
for(int a=0;int i = 1; i <= numberOfTracks; i++)
{
if(!track[i].empty() && (track[i].top() =outputorder[i-1]))
{
rightCar = track[i].top();
itsTrack = i;
}
If(!track[i].empty() && (track[i].top()! =outputorder[i-1])
{
track[i].pop();
int a= track[i].top();
int h
if(h< numberOfTracks)
{
h=i+1;
}
else
{
h=1;
}
track[h].push(a);
h=i+1||i-1;h=< numberOfTracks;
cout<<"Move car "<< rightCar <<" from holding track "<< i <<" to holding track "<< h <<endl;
}
}
}
// 将车厢c移到一个缓冲轨道。返回false,当且仅当没有可用的缓冲轨道
bool putInHoldingTrack(int c)
{
// 为车厢c寻找最合适的缓冲轨道
// 初始化
int bestTrack = 0; // 目前最合适的缓冲轨道
int bestTop = numberOfCars + 1; // 取bestTrack中顶部的车厢
// 扫描缓冲轨道
for(int i = 1; i <= numberOfTracks; i++)
{
bestTrack = i;
}
// 没有可用的缓冲轨道
if(bestTrack == 0)
return false;
// 把车厢c移动到轨道bestTrack
int topCar = track[i].top();
track[bestTrack].push(c);
cout<<"Move car "<<c<<" from input track to holding track "<<bestTrack<<endl;
return true;
}
// 从初始顺序开始重排车厢,如果重排成功,返回true,否则返回false
bool railroad(int inputOrder[], int theNumberOfCars, int theNumberOfTracks)
{
numberOfCars = theNumberOfCars;
numberOfTracks = theNumberOfTracks;
// 创建用于缓冲轨道的栈
track = new stack<int> [numberOfTracks + 1];
rightCar = numberOfCars + 1; // 缓冲轨道中无车厢
// 重排车厢
for(int j= 1; j<= numberOfCars; j++; int i= 1; i<= 10; i++)
{
if(inputOrder[j-1] ==outputorder[i-1])
{
// 将车厢inputOrder[i-1]直接移动出轨道
cout<<"Move car "<<inputOrder[i-1]<<" from input track to output tarck"<<endl;
// 从缓冲轨道移到出轨道
if(i==10)
{
cout<<"Move train"<<train<<" from output tarck"<<endl;
// 移除出轨道的列车
cout<<"Move car "<<inputOrder[i-1]<<" from input track to output tarck"<<endl;
while(rightCar == outputorder[i-1])
{
outputFromHoldingTrack();
i++;
}
}
else
{
// 将车厢inputOrder[i-1]移到一个缓冲轨道
if(!putInHoldingTrack(inputOrder[i-1]))
return false;
}
}
return true;
}
int main()
{
int inputOrder[] = {1, 7, 7, 2, 5, 4, 3, 3, 6, 1, 7, 4, 2, 6, 2, 7, 4, 7, 4, 2, 7, 6, 5, 5, 1, 1, 6, 5, 2, 2, 3, 3, 4, 5, 1, 1, 7, 7, 7, 3, 5, 3, 3, 7, 6, 6, 1, 1, 2, 5, 3, 5, 2, 4, 1, 2, 5, 6, 3, 3, 2, 1, 4, 5, 5, 2, 5, 4, 4, 5, 7, 7, 4, 5, 1, 3, 2, 7, 5, 5, 2, 2, 6, 5, 7, 7, 7, 6, 2, 5, 2, 3, 3, 2, 7, 6, 6, 4, 5, 1, 6, 3, 2, 7, 3, 1, 5, 4, 1, 1};
if(!railroad(inputOrder, 9, 3))
cout<<"无法重排!"<<endl;
return 0;
你前面的一段程序完全不是C++的语法,且无法看出你要做什么
具体的
1。
int outputorder[]; //C++不支持没有下标的数组定义,它必须有常量下标的,如
int outputorder[100];
2。
for(int i=0; i<10; i++) //C++的循环/判断语句必须在函数内,你前面要加函数定义
3。
if(i=0&&outputorder[i]=1) //c++的相等比较不能用=,要用==的
4。
outputorder[]={1,1,1,1,1,3,3,3,3,3};
C++不支持数组多个成员赋值的,它只能用于初始化(你的程序是PYTHON的?)
5。C++不支持数组直接判断的
if(outputorder[]={5,5,5,5,7,7,7,7,7,7}) //C++不存在这样的语法的
后面的一堆都是这类问题
也可以说,你的程序根本不是C++的,且不能以C++语法理解所以无法修改(无法了解你程序 的算法)