#include <stdio.h>
#include <stdlib.h>
typedef struct {
int start;
int finish;
} Activity;
int compare(const void *a, const void *b) {
Activity *act1 = (Activity *)a;
Activity *act2 = (Activity *)b;
return act1->finish - act2->finish; // sort by finish time
}
void activitySelection(Activity activities[], int n) {
qsort(activities, n, sizeof(Activity), compare); // sort activities by finish time
if (n == 0) return;
printf("Selected activities: ");
int last_finish = activities[0].finish;
printf("(%d,%d) ", activities[0].start, activities[0].finish); // select first activity
for (int i = 1; i < n; i++) {
if (activities[i].start >= last_finish) { // no overlap check
printf("-> (%d,%d) ", activities[i].start, activities[i].finish); // select activity
last_finish = activities[i].finish; // update last finish
}
}
printf("-> null\n");
}
int main() {
Activity activities[] = {{1,4}, {3,5}, {0,6}, {5,7}, {8,9}, {5,9}};
int n = sizeof(activities) / sizeof(activities[0]);
activitySelection(activities, n);
return 0;
}
qsort(activities, n, sizeof(Activity), compare);
sort activities by finish time to prioritize earliest finishing
printf("(%d,%d) ", activities[0].start, activities[0].finish);
select first activity after sorting
if (activities[i].start >= last_finish) {
check if current activity starts after or when last selected finished
printf("-> (%d,%d) ", activities[i].start, activities[i].finish);
select current activity if no overlap
last_finish = activities[i].finish;
update last finish time to current activity's finish
Selected activities: (1,4) -> (5,7) -> (8,9) -> null