题目:拓扑排序算法的基本思想
一、基本概念
拓扑排序是一个非常容易理解的概念。我们要回忆一下入度这个概念。
我们想象这样一个图,里面只有两个结点A和B,且只有一条从A指向B的边。那么此时,我们称A的入度为0,B的入度为1。
也就是说,某个结点被几个结点指向,那么它的入度就是几。
所谓拓扑排序,就是每次出队的结点入度都为0。这样一直循环下去,就能将一个图中的结点进行排序。
二、代码实现
(1)初步框架
1.头文件:
#include <stdio.h>
#include <stdlib.h>
2.规定一下点的最大个数(这里以9个点为例):
#define MaxVertex 9
3.定义结点的结构体:
由于用的是邻接表,所以普通的结点和头结点要分开定义。
typedef struct LNode{
int nextVertex;
struct LNode *next;
}*Node;
4.定义头结点的结构体:
这里存放的是入度。
struct HeadNode{
int inDegree;
struct LNode *next;
};
5.定义邻接表结构体:
typedef struct Adj{
int vertexCount;
int edgeCount;
struct HeadNode vertex[MaxVertex];
}*Graph;
(2) 邻接表的基本操作:
1.创建一个邻接表:
Graph createGraph(){
Graph graph = (Graph)malloc(sizeof(stru