⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 railqkk.cpp

📁 本程序是关于火车车皮调度问题
💻 CPP
字号:
#include<iostream.h>
#include<fstream.h>
#define M 50
template<class T>
class queue{
	public:
		queue(const int& max1=10)
		{
  	      maxsize=max1+1;
	      queue1=new T[max1+1];
	      front=rear=0;
		}
	void cp(int max)
		{
			maxsize=max+1;
			queue1=new T[max+1];
		
		}
		bool empty()const{return front==rear;}
		bool full(){return(((rear+1)%maxsize==front)?1:0);}
		T first()const;
		T last()const;
		queue<T>&enqueue( const T& x);
		queue<T>&dequeue();
	private:
		int front;
		int rear;
		int maxsize;
		T* queue1;
};



template<class T>
T queue<T>::first()const
{
	if(empty())return 0;
	return queue1[(front+1)%maxsize];
}
template<class T>
T queue<T>::last()const
{
	if(empty())return 0;
	return queue1[rear];
}
template<class T>
queue<T>&queue<T>::enqueue( const T&x)
{
	rear=(rear+1)%maxsize;
	queue1[rear]=x;
	return *this;
}
template< class T>
queue<T>&queue<T>::dequeue()
{ 
	T x;
	front=(front+1)%maxsize;
	x=queue1[front];
	return *this;
}
int main()
{
	int n,k,x,nowout=1,w=1,j,i=0,entrance[M],out1[M],s=0,p,t;
	queue<int>queue2[M];
	ifstream in("input.txt");
	in>>n>>k;
	
	int *H=new int[n];
	for(j=0;j<n;j++)
	{
		in>>x;
		H[j]=x;
	}
	for(j=0;j<k-1;j++)
	{
		in>>p;
		
		queue2[j].cp(p);
	}
	j=0;
	while(s++<n)
	{
		if(nowout==H[j])
		{
			entrance[i]=0;
			out1[i++]=k;
			nowout++;
			for(t=1;t<w&&nowout<=n;t++)
			{
				if(nowout==queue2[t-1].first())
				{
					entrance[i]=t;
					out1[i++]=k;
					queue2[t-1].dequeue();
					nowout++;
					t=0;
				}
			}
		}
		else
		{
			for(t=1;t<w;t++)
			{
				if(queue2[t-1].last()<H[j]&&!(queue2[t-1].full()))
				{
					queue2[t-1].enqueue(H[j]);
					entrance[i]=0;
					out1[i++]=t;
					if(w==1)w++;
					break;
					
				}
			}
			if(t==w)
			{
				
				queue2[t-1].enqueue(H[j]);
				entrance[i]=0;
				out1[i++]=t;
				w++;
			}
			
		}
		j++;
	}
	ofstream out("output.txt");
	if(w>k)
	{
		out<<"No Solution!"<<endl;
		return 0;
	}

	if(nowout<=n)
	{
		for(t=1;t<=w&&nowout<=n;t++)
		{
			if(nowout==queue2[t-1].first())
			{
				entrance[i]=t;
				out1[i++]=k;
				queue2[t-1].dequeue();
			    nowout++;
				t=0;
			}
		}
	}
	for(t=0;t<i;t++)
		out<<entrance[t]<<"->"<<out1[t]<<endl;
	
	delete[]H;
	return 0;
}




			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -