#include <stdio.h>

#define MAX_ACTIVITY 9

// 活动的结构体 typedef struct { int duration; // 持续时间 int dependencies[MAX_ACTIVITY]; // 依赖的活动 int num_dependencies; // 依赖的活动数量 int early_start; // 最早开始时间 int late_start; // 最迟开始时间 } Activity;

// 计算关键路径 void calculateCriticalPath(Activity activities[], int num_activities) { int i, j;

// 初始化最早开始时间和最迟开始时间为0
for (i = 0; i < num_activities; i++) {
    activities[i].early_start = 0;
    activities[i].late_start = 0;
}

// 计算每个活动的最早开始时间
for (i = 0; i < num_activities; i++) {
    int max_early_start = 0;
    for (j = 0; j < activities[i].num_dependencies; j++) {
        int dependency = activities[i].dependencies[j];
        int early_start = activities[dependency].early_start + activities[dependency].duration;
        if (early_start > max_early_start) {
            max_early_start = early_start;
        }
    }
    activities[i].early_start = max_early_start;
}

// 计算项目的最长耗时
int project_duration = 0;
for (i = 0; i < num_activities; i++) {
    int completion_time = activities[i].early_start + activities[i].duration;
    if (completion_time > project_duration) {
        project_duration = completion_time;
    }
}

// 计算每个活动的最迟开始时间
for (i = num_activities - 1; i >= 0; i--) {
    int min_late_start = project_duration;
    for (j = 0; j < activities[i].num_dependencies; j++) {
        int dependency = activities[i].dependencies[j];
        int late_start = activities[dependency].late_start - activities[i].duration;
        if (late_start < min_late_start) {
            min_late_start = late_start;
        }
    }
    activities[i].late_start = min_late_start;
}

// 输出关键路径和项目最迟开始时间
printf("关键路径:");
for (i = 0; i < num_activities; i++) {
    if (activities[i].early_start == activities[i].late_start) {
        printf("%c ", 'A' + i);
    }
}
printf("\n项目最迟开始时间:%d\n", project_duration);

}

int main() { // 定义活动 Activity activities[MAX_ACTIVITY] = { {3, {}, 0}, {2, {0}, 1}, {4, {0}, 1}, {5, {1}, 1}, {8, {1}, 1}, {3, {2}, 1}, {5, {5}, 1}, {10, {4, 6, 7}, 3}, {2, {3, 6, 7}, 3} };

// 计算关键路径
calculateCriticalPath(activities, MAX_ACTIVITY);

return 0;
#include stdioh#define MAX_ACTIVITY 9 活动的结构体typedef struct int duration; 持续时间 int dependenciesMAX_ACTIVITY; 依赖的活动 int num_dependencies; 依赖的活动数量 int early_start; 最早开始时间 int late_sta

原文地址: https://www.cveoy.top/t/topic/h4LE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录