TopologicalSort(拓扑排序)

TopologicalSort(拓扑排序)

重要的事情说三遍:代码不是我写的!代码不是我写的!代码不是我写的!
是严蔚敏数据结构(C语言版)上写的,记录在博客上以后比较好找。

如有谬误或者不足还请批评指正!

Status TopologicalSort(ALGraph G)
{
     
	//有向图G采用邻接表存储结构
	//若G无回路,则输出G的顶点的一个拓扑序列并返回OK,否则ERROR
	FindInDegree(G, indegree); //对各顶点求入度indegree[0...G.vexnum-1]
	InitStack(S);
	for (i = 0; i < G.vexnum; ++i) //辅助栈S用来保存入度为0的顶点
	{
     
		if (!indegree[i]) //入度为0的顶点入栈
			Push(S, i);
	}
	count = 0; //对输出顶点计数
	while (!StackEmpty(S))
	{
     
		Pop(S, i);
		printf(i, G.vertices[i].data); //输出i号顶点并计数
		count++;
		for (p = G.vertices[i].firstarc; p; p = p->nextarc) //遍历i号顶点的每个邻接点
		{
     
			k = p->adjvex;
			//对i号顶点的每个邻接点的入度减1,若入度减为0,则入栈
			if (!(--indegree[k])) 
				Push(S, k);
		}
	}
	if (count < G.vexnum) //若没有输出所有顶点,则存在以剩下顶点组成的环
		return ERROR;
	else
		return OK;
}

你可能感兴趣的:(数据结构,栈,算法,c语言)