拓扑排序

//拓扑排序算法结构代码
typedef struct EdgeNode  //边表结点
{
int adjvex;//邻接点
int weight;//权值
struct EdgeNode *next;//下一个结点
};


typedef struct VertexNode //顶点表结点
{
int in;//顶点入度
int data;//顶点存储的信息
EdgeNode *firstedge;//边表的头指针
}VertexNode,AdjList[MAXVEX];


typedef struct  
{
AdjList adjlist;
int numVertexes, numEdges;
}graphAdjList,*GraphAdjList;


int TopologicalSort(GraphAdjList GL)
{
EdgeNode *e;
int i, k, gettop;
int top = 0;//用于栈指针下标
int count = 0;//用于统计输出顶点的个数
int *stack;//建栈存储入度为0的顶点
stack = (int*)malloc(GL->numVertexes*sizeof(int));
for ( i = 0; i < GL->numVertexes; i++)
{
if (GL->adjlist[i].in == 0)//如果该顶点的入度为0,就将这个顶点入栈
stack[++top] = i;
}
while (top != 0)
{
gettop = stack[top--];//出栈
printf("%d ->", GL->adjlist[gettop].data);//打印这个顶点
count++;//统计输出顶点数
for(e = GL->adjlist[gettop].firstedge; e; e=e->next)//对这个顶点的边表链接点(这个顶点的弧表)遍历
{
k = e->adjvex;
if (!(--GL->adjlist[k].in))//将k号顶点的邻接点的入度减1,再判断
stack[++top] = k;//如果为0就入栈,方便下次用来循环输出
}
}
if (count < GL->numVertexes)//如果count小于顶点数,说明存在环
return ERROR;
else
return OK;
}
发布了29 篇原创文章 · 获赞 9 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章