C语言项目时间管理:计算任务的最早和最晚完成时间

本代码使用 C 语言实现了一个简单的项目时间管理系统,可以计算任务的最早完成时间和最晚完成时间,帮助用户合理安排项目进度。

代码示例

#include <stdio.h>
#define MAX_TASKS 10

typedef struct { char name; int time; int dependencies[MAX_TASKS]; int numDependencies; } Task;

// 计算任务的最早完成时间 int calculateEarliestTime(Task tasks[], int taskId) { if (tasks[taskId].numDependencies == 0) { return tasks[taskId].time; }

int maxTime = 0;
for (int i = 0; i &lt; tasks[taskId].numDependencies; i++) {
    int dependencyId = tasks[taskId].dependencies[i];
    int dependencyTime = calculateEarliestTime(tasks, dependencyId);
    if (dependencyTime &gt; maxTime) {
        maxTime = dependencyTime;
    }
}

return maxTime + tasks[taskId].time;

}

// 计算任务的最晚完成时间 int calculateLatestTime(Task tasks[], int taskId, int projectTime) { if (tasks[taskId].numDependencies == 0) { return projectTime - tasks[taskId].time; }

int minTime = projectTime;
for (int i = 0; i &lt; tasks[taskId].numDependencies; i++) {
    int dependencyId = tasks[taskId].dependencies[i];
    int dependencyTime = calculateLatestTime(tasks, dependencyId, projectTime);
    if (dependencyTime &lt; minTime) {
        minTime = dependencyTime;
    }
}

return minTime - tasks[taskId].time;

}

int main() { int numTasks; printf("请输入任务数量:"); scanf("%d", &numTasks);

Task tasks[MAX_TASKS];

 // 输入任务信息
for (int i = 0; i &lt; numTasks; i++) {
    printf("请输入任务名称:");
    scanf(" %c", &tasks[i].name);
    
    printf("请输入预计完成时间:");
    scanf("%d", &tasks[i].time);
    
    printf("请输入前置任务数量:");
    scanf("%d", &tasks[i].numDependencies);
    
    printf("请输入前置任务编号(用空格分隔):");
    for (int j = 0; j &lt; tasks[i].numDependencies; j++) {
        scanf("%d", &tasks[i].dependencies[j]);
    }
}

int projectTime = 0;
 // 计算整个项目的最短时间
for (int i = 0; i &lt; numTasks; i++) {
    int taskEarliestTime = calculateEarliestTime(tasks, i);
    if (taskEarliestTime &gt; projectTime) {
        projectTime = taskEarliestTime;
    }
}

printf("整个项目的最短时间为:%d\n", projectTime);

// 计算每个任务的最晚完成时间
for (int i = 0; i &lt; numTasks; i++) {
    int taskLatestTime = calculateLatestTime(tasks, i, projectTime);
    printf("任务%c的最晚完成时间为:%d\n", tasks[i].name, taskLatestTime);
}

return 0;

}

代码说明

  • 代码使用结构体 Task 来存储每个任务的信息,包括任务名称、预计完成时间、前置任务编号和前置任务数量。
  • 函数 calculateEarliestTime 用于计算每个任务的最早完成时间,通过递归遍历所有前置任务并取最大值。
  • 函数 calculateLatestTime 用于计算每个任务的最晚完成时间,通过递归遍历所有后续任务并取最小值。
  • main 函数用于输入任务信息,计算整个项目的最短时间和每个任务的最晚完成时间。

结论

以上代码通过计算每个任务的最早完成时间和最晚完成时间,可以帮助用户合理安排项目进度,避免出现任务延误或资源浪费。

免责声明

本代码仅供学习参考,不保证其完整性和可靠性。实际项目中可能需要根据具体需求进行修改和完善。


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

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