C语言项目时间管理:计算任务的最早和最晚完成时间
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 < tasks[taskId].numDependencies; i++) {
int dependencyId = tasks[taskId].dependencies[i];
int dependencyTime = calculateEarliestTime(tasks, dependencyId);
if (dependencyTime > 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 < tasks[taskId].numDependencies; i++) {
int dependencyId = tasks[taskId].dependencies[i];
int dependencyTime = calculateLatestTime(tasks, dependencyId, projectTime);
if (dependencyTime < 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 < 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 < tasks[i].numDependencies; j++) {
scanf("%d", &tasks[i].dependencies[j]);
}
}
int projectTime = 0;
// 计算整个项目的最短时间
for (int i = 0; i < numTasks; i++) {
int taskEarliestTime = calculateEarliestTime(tasks, i);
if (taskEarliestTime > projectTime) {
projectTime = taskEarliestTime;
}
}
printf("整个项目的最短时间为:%d\n", projectTime);
// 计算每个任务的最晚完成时间
for (int i = 0; i < 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 著作权归作者所有。请勿转载和采集!