首页 > 其他 > 详细

列车重排

时间:2015-03-26 20:29:08      阅读:154      评论:0      收藏:0      [点我收藏+]

数据结构书上的。。

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

  没有正儿八经的用队列。

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

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

 

列车重排

原文:http://www.cnblogs.com/coralyms/p/4369793.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!