{///'title///': ///'C语言关键路径算法实现 - 详解与代码示例///', ///'description///': ///'本文深入讲解了使用C语言实现关键路径算法的步骤,并提供了完整代码示例。通过定义活动结构体,计算最早开始时间、最晚开始时间,最终标记出关键路径。代码清晰易懂,方便学习和参考。///', ///'keywords///': ///'关键路径, 关键路径算法, C语言, 算法, 项目管理, 程序设计, 代码示例///', ///'content///': ///'#include <stdio.h>//n#include <stdlib.h>//n//n// 定义活动的结构体//ntypedef struct {//n char name;//n int duration;//n int earliestStart;//n int latestStart;//n int critical;//n int numOfPredecessors;//n char *predecessors;//n} Activity;//n//n// 计算关键路径的函数//nvoid calculateCriticalPath(Activity *activities, int numActivities) {//n int i, j, k;//n int maxDuration = 0;//n char criticalPath[numActivities]; // 存储关键路径的数组//n int pathIndex = 0; // 关键路径索引//n //n // 初始化最早开始时间和最晚开始时间//n for (i = 0; i < numActivities; i++) {//n activities[i].earliestStart = 0;//n activities[i].latestStart = INT_MAX;//n }//n //n // 计算每个活动的最早开始时间//n for (i = 0; i < numActivities; i++) {//n for (j = 0; j < activities[i].numOfPredecessors; j++) {//n k = activities[i].predecessors[j] - 'A';//n if (activities[k].duration + activities[k].earliestStart > activities[i].earliestStart) {//n activities[i].earliestStart = activities[k].duration + activities[k].earliestStart;//n }//n }//n }//n //n // 计算项目的最长时间//n for (i = 0; i < numActivities; i++) {//n if (activities[i].duration + activities[i].earliestStart > maxDuration) {//n maxDuration = activities[i].duration + activities[i].earliestStart;//n }//n }//n //n // 计算每个活动的最晚开始时间//n for (i = numActivities - 1; i >= 0; i--) {//n for (j = 0; j < activities[i].numOfPredecessors; j++) {//n k = activities[i].predecessors[j] - 'A';//n if (activities[i].latestStart - activities[i].duration < activities[k].latestStart) {//n activities[k].latestStart = activities[i].latestStart - activities[i].duration;//n }//n }//n }//n //n // 标记关键路径//n for (i = 0; i < numActivities; i++) {//n if (activities[i].earliestStart == activities[i].latestStart) {//n activities[i].critical = 1;//n criticalPath[pathIndex++] = activities[i].name; // 将关键活动加入关键路径数组//n } else {//n activities[i].critical = 0;//n }//n }//n //n // 输出关键路径//n printf(/'关键路径为:/');//n for (i = 0; i < pathIndex; i++) { // 遍历关键路径数组//n printf(/'%c /', criticalPath[i]);//n }//n printf(/'//n/');//n //n // 输出项目最迟开始时间//n printf(/'项目最迟开始时间为:%d//n/', maxDuration);//n}//n//nint main() {//n int numActivities = 9;//n Activity activities[numActivities];//n int i;//n //n // 初始化活动列表//n activities[0].name = 'A';//n activities[0].duration = 3;//n activities[0].numOfPredecessors = 0;//n //n activities[1].name = 'B';//n activities[1].duration = 2;//n activities[1].numOfPredecessors = 1;//n activities[1].predecessors = (char *)malloc(sizeof(char));//n *(activities[1].predecessors) = 'A';//n //n activities[2].name = 'C';//n activities[2].duration = 4;//n activities[2].numOfPredecessors = 1;//n activities[2].predecessors = (char *)malloc(sizeof(char));//n *(activities[2].predecessors) = 'A';//n //n activities[3].name = 'D';//n activities[3].duration = 5;//n activities[3].numOfPredecessors = 1;//n activities[3].predecessors = (char *)malloc(sizeof(char));//n *(activities[3].predecessors) = 'B';//n //n activities[4].name = 'E';//n activities[4].duration = 8;//n activities[4].numOfPredecessors = 1;//n activities[4].predecessors = (char *)malloc(sizeof(char));//n *(activities[4].predecessors) = 'B';//n //n activities[5].name = 'F';//n activities[5].duration = 3;//n activities[5].numOfPredecessors = 1;//n activities[5].predecessors = (char *)malloc(sizeof(char));//n *(activities[5].predecessors) = 'C';//n //n activities[6].name = 'G';//n activities[6].duration = 5;//n activities[6].numOfPredecessors = 1;//n activities[6].predecessors = (char *)malloc(sizeof(char));//n *(activities[6].predecessors) = 'F';//n //n activities[7].name = 'H';//n activities[7].duration = 10;//n activities[7].numOfPredecessors = 1;//n activities[7].predecessors = (char *)malloc(sizeof(char));//n *(activities[7].predecessors) = 'E';//n //n activities[8].name = 'I';//n activities[8].duration = 2;//n activities[8].numOfPredecessors = 3;//n activities[8].predecessors = (char *)malloc(3 * sizeof(char));//n *(activities[8].predecessors) = 'D';//n *(activities[8].predecessors + 1) = 'G';//n *(activities[8].predecessors + 2) = 'H';//n //n calculateCriticalPath(activities, numActivities);//n // 打印关键路径//n printf(/'关键路径为:/');//n for (i = 0; i < numActivities; i++) {//n if (activities[i].critical) {//n printf(/'%c /', activities[i].name);//n }//n }//n printf(/'//n/');//n //n return 0;//n}//n/

C语言关键路径算法实现 - 详解与代码示例

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

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