关键路径算法(Critical Path Method,CPM)是一种用于项目管理的算法,用于确定项目中最长的路径,即关键路径,以及各个任务的最早开始时间和最晚开始时间。以下是一个关键路径算法的Java代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| import java.util.*;
class Task { String name; int duration; List<Task> dependencies;
Task(String name, int duration) { this.name = name; this.duration = duration; this.dependencies = new ArrayList<>(); }
void addDependency(Task dependency) { dependencies.add(dependency); } }
public class CriticalPathMethod {
public static void calculateCriticalPath(List<Task> tasks) { Map<Task, Integer> earliestStartTimes = new HashMap<>(); Map<Task, Integer> latestStartTimes = new HashMap<>();
for (Task task : tasks) { int earliestStartTime = 0; for (Task dependency : task.dependencies) { earliestStartTime = Math.max(earliestStartTime, earliestStartTimes.get(dependency) + dependency.duration); } earliestStartTimes.put(task, earliestStartTime); }
int projectDuration = 0; for (Task task : tasks) { projectDuration = Math.max(projectDuration, earliestStartTimes.get(task) + task.duration); } for (Task task : tasks) { latestStartTimes.put(task, projectDuration - task.duration); }
System.out.println("Critical Path:"); for (Task task : tasks) { if (earliestStartTimes.get(task).equals(latestStartTimes.get(task))) { System.out.println(task.name); } } }
public static void main(String[] args) { Task A = new Task("A", 5); Task B = new Task("B", 3); Task C = new Task("C", 2); Task D = new Task("D", 4); Task E = new Task("E", 6);
B.addDependency(A); C.addDependency(A); D.addDependency(B); D.addDependency(C); E.addDependency(D);
List<Task> tasks = new ArrayList<>(Arrays.asList(A, B, C, D, E));
calculateCriticalPath(tasks); } }
|
在这个示例中,我们使用关键路径算法来计算一个简单项目的关键路径。Task
类表示任务,其中包含任务名称、持续时间和依赖关系。calculateCriticalPath
方法计算每个任务的最早开始时间和最晚开始时间,并根据最早开始时间和最晚开始时间的差异来确定关键路径。
这个示例是一个简化的关键路径算法实现,实际应用中可能需要考虑更多的细节和优化。