对AOV网进行拓扑排序的基本思路是:从AOV网中选择一个入度为0的顶点输出,然后删除此顶点,并删除以此顶点为尾的弧,继续重复此步骤,直到输出全部顶点或者在AOV网中不存在入度为0的顶点为止。
这里图使用的数据结构是邻接表,并且在顶点表加入顶点入度一项。
以下程序在DEV C++中编译运行通过。
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 20
typedef struct EdgeNode
{
int adjvex;//邻接点域,存储该顶点对应的下标
struct EdgeNode *next;//链域,指向下一个邻接点
}EdgeNode;
typedef struct VertexNode
{
int in;//顶点入度
char data;//顶点域,存储顶点信息
EdgeNode *firstedge;//边表头指针
}VertexNode,AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numVertexes,numEdges;
}GraphAdjList;
void CreateALGraph(GraphAdjList *G)
{
int i,j,k;
EdgeNode *e;
printf("输入顶点数和边数:\n");
scanf(&#