列车重排

数据结构书上的。。

#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;
}

  没有正儿八经的用队列。

  如果车辆的编号不是连续的,就先要进行编号的排序,才能确定依次出站的车辆编号的序列。

  当然我这个只是最简单的列车重排。

 

转载于:https://www.cnblogs.com/coralyms/p/4369793.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值