C语言实现拓扑排序算法案例:课程学习顺序
{/'title/':/'C语言实现拓扑排序算法案例:课程学习顺序/',/'description/':/'本文提供了一个使用C语言实现拓扑排序算法的案例,并以课程学习顺序为例,展示了如何利用数据结构和算法解决实际问题。代码包含输入和输出,并详细解释了算法的实现步骤。/',/'keywords/':/'拓扑排序, 拓扑排序算法, C语言, 数据结构, 课程学习顺序, 算法案例, 代码示例/',/'content/':/'拓扑排序(Topological Sorting)是指将有向无环图(DAG)中的所有节点按照一定的顺序进行排序的算法。拓扑排序可以用来解决任务调度、依赖关系等问题。//n//n以下是一个拓扑排序的案例例题,假设有5个课程,它们的先后学习顺序如下://n//n1. 数学课程(没有先修课程)//n2. 物理课程(先修课程为数学课程)//n3. 化学课程(先修课程为数学课程和物理课程)//n4. 生物课程(先修课程为化学课程)//n5. 英语课程(没有先修课程)//n//n现在要求编写一个C语言程序,实现对这5个课程进行拓扑排序,并输出排序结果。//n//nc//n#include <stdio.h>//n//n#define MAX_COURSES 5//n//nint courses[MAX_COURSES][MAX_COURSES] = {//n {0, 1, 1, 1, 1}, // 数学课程的先修课程//n {0, 0, 1, 1, 1}, // 物理课程的先修课程//n {0, 0, 0, 1, 1}, // 化学课程的先修课程//n {0, 0, 0, 0, 1}, // 生物课程的先修课程//n {0, 0, 0, 0, 0} // 英语课程的先修课程//n};//n//nvoid topologicalSort(int courses[][MAX_COURSES], int n) {//n int inDegree[MAX_COURSES] = {0}; // 记录每个课程的入度//n int queue[MAX_COURSES] = {0}; // 用于存储入度为0的课程//n int front = 0, rear = 0; // 队列的头尾指针//n//n // 计算每个课程的入度//n for (int i = 0; i < n; i++) {//n for (int j = 0; j < n; j++) {//n if (courses[j][i] == 1) {//n inDegree[i]++;//n }//n }//n }//n//n // 将入度为0的课程入队//n for (int i = 0; i < n; i++) {//n if (inDegree[i] == 0) {//n queue[rear++] = i;//n }//n }//n//n // 拓扑排序//n while (front != rear) {//n int course = queue[front++];//n printf(/'%d /', course + 1); // 输出排序结果//n//n // 更新相关课程的入度//n for (int i = 0; i < n; i++) {//n if (courses[course][i] == 1) {//n inDegree[i]--;//n if (inDegree[i] == 0) {//n queue[rear++] = i;//n }//n }//n }//n }//n}//n//nint main() {//n printf(/'拓扑排序结果:/');//n topologicalSort(courses, MAX_COURSES);//n printf(/'//n/');//n//n return 0;//n}//n//n//n运行以上代码,输出结果为:拓扑排序结果:1 2 3 4 5/
原文地址: https://www.cveoy.top/t/topic/pEZZ 著作权归作者所有。请勿转载和采集!