求解活动安排问题 C语言代码
时间: 2024-12-23 08:10:43 浏览: 9
在C语言中,求解活动安排问题通常涉及优化算法,比如贪心、动态规划或者回溯等。这类问题常用于解决任务调度或资源分配,例如课程表生成,其中需要考虑限制条件如时间冲突、优先级等因素。
这里提供一个简单的示例,假设我们要生成一个不冲突的日程安排,每个任务有一个开始时间和结束时间:
```c
#include <stdio.h>
#define MAX_TASKS 10
typedef struct {
int start;
int end;
} Task;
int is_conflict(Task tasks[], int task1, int task2) {
return (tasks[task1].end >= tasks[task2].start);
}
void print_schedule(Task tasks[], int n) {
for (int i = 0; i < n; ++i) {
printf("Task %d: %d-%d\n", i+1, tasks[i].start, tasks[i].end);
}
}
// 采用贪心策略简单处理,仅作为演示
int schedule(Task tasks[], int n) {
// 先按结束时间排序
for (int i = 1; i < n; i++) {
if (tasks[i].start < tasks[i - 1].start)
swap(tasks[i], tasks[i - 1]);
}
Task* current_task = &tasks[0];
printf("Schedule:\n");
for (int i = 0; i < n; i++) {
// 如果新添加的任务不会冲突,则添加
if (!is_conflict(tasks, i, current_task->index))
current_task++;
else
break; // 找到冲突,停止添加
}
print_schedule(tasks, current_task->index);
}
int main() {
Task tasks[MAX_TASKS] = { {1, 3}, {2, 5}, {4, 7}, {6, 8} };
int n = sizeof(tasks) / sizeof(tasks[0]);
schedule(tasks, n);
return 0;
}
```
这个例子是一个简化版的活动安排,它通过先排序再尝试依次添加任务的方式来尽量减少冲突。实际场景可能更复杂,需要考虑更多的约束条件。
阅读全文