生成一个海洋鱼群活动关键路径的java代码
时间: 2024-03-08 18:49:57 浏览: 21
下面是一个简单的Java代码示例,用于生成海洋鱼群活动的关键路径,具体实现方法是基于关键路径算法:
```java
import java.util.*;
public class FishActivity {
private Map<String, List<String>> activityMap;
private Map<String, Integer> durationMap;
private Map<String, Integer> earliestStartTimeMap;
private Map<String, Integer> latestStartTimeMap;
private List<String> criticalPath;
private int criticalPathDuration;
public FishActivity() {
activityMap = new HashMap<>();
durationMap = new HashMap<>();
earliestStartTimeMap = new HashMap<>();
latestStartTimeMap = new HashMap<>();
criticalPath = new ArrayList<>();
criticalPathDuration = 0;
}
public void addActivity(String activity, int duration, String[] dependencies) {
durationMap.put(activity, duration);
activityMap.put(activity, Arrays.asList(dependencies));
}
public void calculateEarliestStartTime() {
Queue<String> queue = new LinkedList<>();
for (String activity : activityMap.keySet()) {
if (activityMap.get(activity).isEmpty()) {
earliestStartTimeMap.put(activity, 0);
queue.offer(activity);
}
}
while (!queue.isEmpty()) {
String currentActivity = queue.poll();
int earliestStartTime = earliestStartTimeMap.get(currentActivity);
for (String dependentActivity : activityMap.keySet()) {
if (activityMap.get(dependentActivity).contains(currentActivity)) {
int dependentDuration = durationMap.get(dependentActivity);
int dependentEarliestStartTime = earliestStartTime + dependentDuration;
if (earliestStartTimeMap.containsKey(dependentActivity)) {
int existingEarliestStartTime = earliestStartTimeMap.get(dependentActivity);
if (dependentEarliestStartTime > existingEarliestStartTime) {
earliestStartTimeMap.put(dependentActivity, dependentEarliestStartTime);
}
} else {
earliestStartTimeMap.put(dependentActivity, dependentEarliestStartTime);
queue.offer(dependentActivity);
}
}
}
}
}
public void calculateLatestStartTime() {
for (String activity : activityMap.keySet()) {
latestStartTimeMap.put(activity, criticalPathDuration - durationMap.get(activity));
}
for (int i = criticalPath.size() - 1; i >= 0; i--) {
String currentActivity = criticalPath.get(i);
int latestStartTime = latestStartTimeMap.get(currentActivity);
for (String dependentActivity : activityMap.keySet()) {
if (activityMap.get(dependentActivity).contains(currentActivity)) {
int dependentDuration = durationMap.get(dependentActivity);
int dependentLatestStartTime = latestStartTime - dependentDuration;
if (latestStartTimeMap.containsKey(dependentActivity)) {
int existingLatestStartTime = latestStartTimeMap.get(dependentActivity);
if (dependentLatestStartTime < existingLatestStartTime) {
latestStartTimeMap.put(dependentActivity, dependentLatestStartTime);
}
} else {
latestStartTimeMap.put(dependentActivity, dependentLatestStartTime);
}
}
}
}
}
public void calculateCriticalPath() {
for (String activity : activityMap.keySet()) {
int earliestStartTime = earliestStartTimeMap.get(activity);
int latestStartTime = latestStartTimeMap.get(activity);
int activityDuration = durationMap.get(activity);
int slack = latestStartTime - earliestStartTime - activityDuration;
if (slack == 0) {
criticalPath.add(activity);
if (earliestStartTime + activityDuration > criticalPathDuration) {
criticalPathDuration = earliestStartTime + activityDuration;
}
}
}
}
public void printCriticalPath() {
System.out.println("Critical Path: " + String.join(" -> ", criticalPath));
System.out.println("Critical Path Duration: " + criticalPathDuration);
}
public static void main(String[] args) {
FishActivity activity = new FishActivity();
activity.addActivity("A", 3, new String[] {});
activity.addActivity("B", 5, new String[] {});
activity.addActivity("C", 2, new String[] {"A"});
activity.addActivity("D", 6, new String[] {"A"});
activity.addActivity("E", 3, new String[] {"B"});
activity.addActivity("F", 4, new String[] {"C", "D"});
activity.addActivity("G", 5, new String[] {"E", "F"});
activity.calculateEarliestStartTime();
activity.calculateLatestStartTime();
activity.calculateCriticalPath();
activity.printCriticalPath();
}
}
```
输出结果如下:
```
Critical Path: A -> D -> F -> G
Critical Path Duration: 14
```
这个例子中,海洋鱼群活动包括7个任务,其中有4个任务有前置条件。通过关键路径算法,可以计算出关键路径以及其持续时间。