数据结构书上的。。
#include <iostream>
#include <string.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
// 列车重排
int k; // 轨道的数量
int num; // 车的数量
int arr[100]; // 车的序列
int arr2[10][100]; // 轨道情况
int trying = 0; // 即将要进轨道的车辆下标
int trying2 = 0; // 最大的空的轨道的编号
int outing = 1; // 当前可以出轨道的车辆编号
int main(int argc, char *argv[]) {
cin>>k;
cin>>num;
memset(arr, 0, sizeof(int) * 100);
memset(arr2, 0, sizeof(int) * 1000);
for(int i = 0; i < num; i++)
{
cin>>arr[i];
}
//
while(trying < num && trying2 < k)
{
bool dofind = false;
for(int i = 0; i < k; i++)
{
if( arr[trying] == outing )
{
cout<<"--------------------------------------------"<<endl;
cout<<arr[trying]<<"号车直接到出轨处"<<endl;
outing++;
trying++;
break;
}
if(arr2[i][0] == 0 || arr[trying] > arr2[i][arr2[i][0]])
{
arr2[i][0]++;
arr2[i][arr2[i][0]] = arr[trying];
dofind = true;
if( trying2 < i )
{
trying2 = i;
}
trying++;
break;
}
}
cout<<"--------------------------------------------"<<endl;
for(int i = 0; i <= trying2; i++)
{
for(int j = 1; j <= arr2[i][0]; j++)
{
cout<<arr2[i][j]<<" ";
}
cout<<endl;
}
}
if( trying != num)
{
cout<<"no method!"<<endl;
}
else
{
// 按顺序出站
int front[10] = {1,1,1,1,1,1,1,1,1,1};
while( outing <= num )
{
for(int i = 0; i < k; i++)
{
if( arr2[i][front[i]] == outing )
{
cout<<"--------------------------------------------"<<endl;
cout<<outing<<"号车出站"<<endl;
outing++;
front[i]++;
break;
}
}
}
}
return 0;
}
没有正儿八经的用队列。
如果车辆的编号不是连续的,就先要进行编号的排序,才能确定依次出站的车辆编号的序列。
当然我这个只是最简单的列车重排。