火车进站

package OJ;


import java.util.*;


public class Bully {


/*
* 火车进站
* 先全排列,再输出符合栈规则的项

  * */

private static int cont = 1;

private static ArrayList<String> al = new ArrayList<String>();


public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

while(sc.hasNext()){

int n = Integer.parseInt(sc.nextLine());//输入为火车的总数
int[] str = new int[100];
for(int i=0;i<n;i++)
str[i] = i+1;

perm(str,0,n);


}
}



private static void perm(int[] str, int k, int n) {

if(k==n-1)
print(str,n);//输出项
else{
int temp;
for(int i=k;i<n;i++){
temp = str[k];
str[k] = str[i];
str[i] = temp;

perm(str,k+1,n);

temp = str[i];
str[i] = str[k];
str[k] = temp;
}
}

}




private static void print(int[] str, int n) {

boolean flag = true;
int[] b = new int[2];

for(int i=0;i<n;i++){
int m = 0;
for(int j=i+1;j<n && flag;j++){
if(str[i]>str[j]){
if(m==0)
b[m++] = str[j];
else{
if(str[j]>b[0])
flag = false;
else
b[0] = str[j];
}
}
}
}
if(flag){
sop(cont++ + " ");
for(int i=0;i<n;i++){
sop(str[i]);
}
sop("\n");
}

}




public static void sop(Object o){
System.out.print(o);
}


}
### 火车进站调度算法及优化方法 火车进站调度问题涉及多个因素,包括列车的优先级、车站容量限制以及时间优化等。以下是一些常见的算法及其应用: #### 1. 最早截止时间优先(Earliest Deadline First, EDF) EDF 是一种实时调度算法,适用于需要根据时间紧迫性进行排序的场景。在火车进站问题中,可以根据每列火车的预计到达时间或离开时间设置优先级,优先处理截止时间最早的列车[^1]。这种方法能够有效减少延误,并确保高优先级列车按时运行。 #### 2. 先到先服务(First-Come, First-Served, FCFS) FCFS 是一种简单的调度算法,按照列车到达车站的顺序依次处理。虽然该算法易于实现且公平,但在某些情况下可能导致低效,尤其是当高优先级列车需要等待较长时间才能进站时[^1]。 #### 3. 贪心算法(Greedy Algorithm) 贪心算法通过每次都选择当前最优决策来解决问题。在火车进站调度中,可以将“最优决策”定义为最大化车站利用率或最小化总等待时间。例如,每次选择能最早完成进站操作的列车,或者选择占用最少资源的列车[^2]。需要注意的是,贪心算法并不总是能找到全局最优解,因此在复杂场景下可能需要结合其他算法。 #### 4. 最小费用最大流 对于更复杂的火车进站问题,如涉及多个车站和有限容量的情况,可以使用最小费用最大流算法建模。具体做法是将车站和列车抽象为图中的节点,通过添加源点、汇点以及超级源汇点来表示列车的进出关系和车站容量限制。每条边的费用可以设置为负的火车停留成本,最终通过求解最小费用最大流来获得最优调度方案[^3]。 ```python # 示例代码:最小费用最大流的基本框架 from collections import deque class MinCostMaxFlow: def __init__(self, n): self.n = n self.graph = [[] for _ in range(n)] def add_edge(self, u, v, cap, cost): self.graph[u].append((v, cap, cost, len(self.graph[v]))) self.graph[v].append((u, 0, -cost, len(self.graph[u]) - 1)) def min_cost_max_flow(self, s, t): flow, cost = 0, 0 potential = [0] * self.n while True: dist = [float('inf')] * self.n prev_v = [-1] * self.n prev_e = [-1] * self.n dist[s] = 0 queue = deque([s]) while queue: u = queue.popleft() for i, (v, cap, c, _) in enumerate(self.graph[u]): if cap > 0 and dist[v] > dist[u] + c + potential[u] - potential[v]: dist[v] = dist[u] + c + potential[u] - potential[v] prev_v[v] = u prev_e[v] = i queue.append(v) if dist[t] == float('inf'): break for u in range(self.n): potential[u] += dist[u] if dist[u] < float('inf') else 0 f = float('inf') v = t while v != s: u = prev_v[v] f = min(f, self.graph[u][prev_e[v]][1]) v = u flow += f cost += f * potential[t] v = t while v != s: u = prev_v[v] edge = self.graph[u][prev_e[v]] edge[1] -= f self.graph[v][edge[3]][1] += f v = u return flow, cost ``` 上述代码实现了最小费用最大流算法的核心逻辑,可用于解决火车进站调度问题中的流量分配与成本优化。 #### 5. 动态规划 动态规划适用于需要考虑多阶段决策的问题。在火车进站调度中,可以将每个时间点视为一个阶段,状态表示当前车站的占用情况,决策为是否允许某列火车进站。通过递推公式计算出最优解,从而实现时间优化[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值