列车调度代码java 列车调度运行图

铁路调度口的车厢序列的编号依次1,2,3,…,n,求出所有可能由此输出的长度为n的车厢序列的程序,基于java

第一个数是n个里选一个,

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站建设、做网站、河南网络推广、小程序开发、河南网络营销、河南企业策划、河南品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供河南建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

第二个数据是n-1个里选一个

.

.

.

第n个数据是1个里选择一个,

所有的乘起来就得了。

栈是后进先出的,那可能的输出序列只有n种。

1!+2!+3!+……+n!可能是你想要的结果。

车厢调度 代码 C语言版 看清题在答

c++的代码就有,C语言的只帮你找了这个,你看看是否合适【分析】 为了重排车厢,需从前至后依次检查入轨上的所有车厢。如果正在检查的车厢就是下一个满足排列要求的车厢,可以直接把它放到出轨上去。如果不是,则把它移动到缓冲铁轨上,直到按输出次序要求轮到它时才将它放到出轨上。缓冲铁轨是按照LIFO的方式使用的,因为车厢的进和出都是在缓冲铁轨的顶部进行的。在重排车厢过程中,仅允许以下两种移动:

①车厢可以从入轨的前部(即右端)移动到一个缓冲铁轨的顶部或出轨的左端。

②车厢可以从一个缓冲铁轨的顶部移动到出轨的左端。

考察图2-18。3号车厢在入轨的前部,但由于它必须位于1号和2号车厢的后面,因此不能立即输出3号车厢,可把3号车厢送入缓冲铁轨H1。下一节车厢是6号车厢,也必须送入缓冲铁轨。如果把6号铁轨送入H1,那么重排过程将无法完成,因为3号车厢位于6号车厢的后面,而按照重排的要求,3号车厢必须在6号车厢之前输出。因此可把6号车厢送入H2。下一节车厢是9号车厢,被送入H3,因为如果把它送入H1或H2,重排过程也将无法完成。请注意:当缓冲铁轨上的车厢编号不是按照从顶到底的递增次序排列时,重排任务将无法完成。至此,缓冲铁轨的当前状态如图2-19a所示。

图2-19 缓冲铁轨中间状态

接下来处理2号车厢,它可以被送入任一个缓冲铁轨,因为它能满足缓冲铁轨上车厢编号必须递增排列的要求,不过,应优先把2号车厢送入H1,因为如果把它送入H3,将没有空间来移动7号车厢和8号车厢。如果把2号车厢送入H2,那么接下来的4号车厢必须被送入H3,这样将无法移动后面的5号、7号和8号车厢。新的车厢u应送入这样的缓冲铁轨:其顶部的车厢编号v满足vu,且v是所有满足这种条件的缓冲铁轨顶部车厢编号中最小的一个编号。只有这样才能使后续的车厢重排所受到的限制最小。我们将使用这条分配规则(assignment

rule)来选择缓冲铁轨。

接下来处理4号车厢时,三个缓冲铁轨顶部的车厢分别是2号、6号和9号车厢。根据分配规则,4号车厢应送入H2。这之后,7号车厢被送入H3。图2-19b给出了当前的状态。接下来,1号车厢被送至出轨,这时,可以把H1中的2号车厢送至出轨。之后,从H1输出3号车厢,从H2输出4号车厢。至此,没有可以立即输出的车厢了。

接下来的8号车厢被送入H1,然后5号车厢从入轨处直接输出到出轨处。这之后,从H2输出6号车厢,从H3输出7号车厢,从H1输出8号车厢,最后从H3输出9号车厢。

对于图2-19a的初始排列次序,在进行车厢重排时,只需三个缓冲铁轨就够了,而对于其他的初始次序,可能需要更多的缓冲铁轨。例如,若初始排列次序为1,n,n-1,…,2,则需要n-1个缓冲铁轨。

为了实现上述思想,用k个链表形式的堆栈来描述k个缓冲铁轨。之所以采用链表形式的堆栈而不是公式化形式的堆栈,原因在于前者仅需要n-1个元素。函数Railroad用于确定重排n个车厢,它最多可使用k个缓冲铁轨并假定车厢的初始次序为p[1:n]。如果不能成功地重排,Railroad返回false,否则返回true。如果由于内存不足而使函数失败,则引发一个异常NoMem。

函数Railroad在开始时创建一个指向堆栈的数组H,H[i]代表缓冲铁轨i,1≤i≤k。NowOut是下一个欲输出至出轨的车厢号。minH是各缓冲铁轨中最小的车厢号,minS是minH号车厢所在的缓冲铁轨。

在for循环的第i次循环中,首先从入轨处取车厢p[i],若p[i]=NowOut,则将其直接送至出轨,并将NowOut的值增1,这时,有可能会从缓冲铁轨中输出若干节车厢(通过while循环把它们送至出轨处)。如果p[i]不能直接输出,则没有车厢可以被输出,按照前述的铁轨分配规则把p[i]送入相应的缓冲铁轨之中。

【解答】

Railroad(int p[],int n,int k)

{

∥k个缓冲铁轨,车厢初始排序为p[1:n]

∥如果重排成功,返回1,否则返回0

∥创建与缓冲铁轨对应的堆栈

LinkedStackint*H;

H=new LinkedStackint[k+1];

int NowOut=1; ∥下一次要输出的车厢

int minH=n+l; ∥缓冲铁轨中编号最小的车厢

int minS; ∥minH号车厢对应的缓冲铁轨

∥车厢重排

for(int i=1;i=n;i++)

if(p[i]==NowOut){∥直接输出t

printf("Move car %d from input to output.\\n",p[i]);

NowOut++;

∥从缓冲铁轨中输出

while(minH==NowOut){

Output(minH,minS,H,k,n);

NowOut++;

}

}

else{ ∥将p[i]送入某个缓冲铁轨

if(!Hold(p[i],minH,minS,H,k,n))

return 0;

}

return 1;

}

下面分别给出了Railroad中所使用的函数Output和Hold。Output用于把一节车厢从缓冲铁轨送至出轨处,它同时将修改minS和minH。函数Hold根据车厢分配规则把车厢c送入某个缓冲铁轨,必要时,它也需要修改minS和minH。

void Output(int minH,int minS,LinkedStackintH[],int k,int n)

{

∥把车厢从缓冲铁轨送至出轨处,同时修改minS和minH

int c;∥车厢索引

∥从堆栈minS中删除编号最小的车厢minH

H[minS].Delete(c);

printf("Move car %d from holding track %d to output.\\n",minH,minS);

∥通过检查所有的栈顶,搜索新的minH和minS

minH=n+2;

for(int i=1;i=k;i++)

if(!H[i].IsEmpty()(c=H[i].Top())minH){

minH=c;

minS=i;

}

}

java如何获得每天8点这一时刻的long值?

java 每天获得8点这一时刻的long值,主要是使用timer类,来每隔一天执行,进行调度,如下代码:

package com.qiu.lin.he;

import java.util.Calendar;

import java.util.Timer;

import java.util.TimerTask;

public class Ceshi {

public static void main(String[] args) {

Timer timer = new Timer();//新建Timer类

Calendar cal = Calendar.getInstance();

// 每天定点执行

cal.set(Calendar.HOUR_OF_DAY, 8);

cal.set(Calendar.MINUTE, 0);

cal.set(Calendar.SECOND, 0);

timer.schedule(new TimerTask() {//每天执行输出时间

@Override

public void run() {

System.out.println(System.currentTimeMillis());

}

}, cal.getTime(), 24 * 60 * 60 * 1000);

}

}

java代码,多机调度问题,怎么解释

多机调度问题的Java实现(贪心算法)

具体问题描述以及C/C++实现参见网址

[java] view plain copy print?

import java.util.ArrayList;  

import java.util.Collections;  

import java.util.LinkedList;  

import java.util.List;  

/** 

* 多机调度问题--贪心算法 

* @author Lican 

*/  

public class JobMachine {  

public static class JobNode implements Comparable{  

int id;//作业的标号  

int time;//作业时间  

public JobNode(int id,int time){  

this.id=id;  

this.time=time;  

}  

@Override  

public int compareTo(Object x) {//按时间从大到小排列  

int times=((JobNode)x).time;  

if(timetimes) return -1;  

if(time==times) return 0;  

return 1;  

}         

}  

public static class MachineNode implements Comparable{  

int id;//机器的标号  

int avail;//机器空闲的时间(即机器做完某一项工作的时间)  

public MachineNode(int id,int avail){  

this.id=id;  

this.avail=avail;  

}  

@Override  

public int compareTo(Object o) {//升序排序,LinkedList的first为最小的  

int xs=((MachineNode)o).avail;  

if(availxs) return -1;  

if(avail==xs) return 0;  

return 1;  

}  

}  

public static int greedy(int[] a ,int m){  

int n=a.length-1;//a的下标从1开始,所以n(作业的数目)=a.length-1  

int sum=0;  

if(n=m){  

for(int i=0;in;i++)  

sum+=a[i+1];  

System.out.println("为每个作业分别分配一台机器");  

return sum;  

}  

ListJobNode d=new ArrayListJobNode();//d保存所有的作业  

for(int i=0;in;i++){//将所有的作业存入List中,每一项包含标号和时间  

JobNode jb=new JobNode(i+1,a[i+1]);  

d.add(jb);  

}  

Collections.sort(d);//对作业的List进行排序  

LinkedListMachineNode h=new LinkedListMachineNode();//h保存所有的机器  

for(int i=1;i=m;i++){//将所有的机器存入LinkedList中  

MachineNode x=new MachineNode(i,0);//初始时,每台机器的空闲时间(完成上一个作业的时间)都为0  

h.add(x);  

}  

int test=h.size();  

for(int i=0;in;i++){  

Collections.sort(h);  

MachineNode x=h.peek();  

System.out.println("将机器"+x.id+"从"+x.avail+"到"+(x.avail+d.get(i).time)+"的时间段分配给作业"+d.get(i).id);  

x.avail+=d.get(i).time;  

sum=x.avail;  

}  

return sum;  

}  

public static void main(String[] args) {  

int[] a={0,2,14,4,16,6,5,3};  

int m=3;  

int sum=greedy(a,m);  

System.out.println("总时间为:"+sum);  

}  

}  

/** 

运行结果: 

将机器1从0到16的时间段分配给作业4 

将机器2从0到14的时间段分配给作业2 

将机器3从0到6的时间段分配给作业5 

将机器3从6到11的时间段分配给作业6 

将机器3从11到15的时间段分配给作业3 

将机器2从14到17的时间段分配给作业7 

将机器3从15到17的时间段分配给作业1 

总时间为:17 

*/

本文名称:列车调度代码java 列车调度运行图
转载源于:https://www.cdcxhl.com/article20/hisojo.html

成都网站建设公司_创新互联,为您提供外贸网站建设网站内链品牌网站建设网站策划关键词优化网站收录

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司