数据结构书上的。。
#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; }
没有正儿八经的用队列。
如果车辆的编号不是连续的,就先要进行编号的排序,才能确定依次出站的车辆编号的序列。
当然我这个只是最简单的列车重排。
此博客主要是个人记录