`
yzmduncan
  • 浏览: 330408 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

拓扑排序Topologic Sort

阅读更多

一.定义

拓扑排序就是在一个有向无环图中,将所有顶点排成一个线性序列,使得在途中任意一对定点U,V,若<u,v>∈E(G),则U出现在线性序列V之前。通常将这样的线性序列称为满足拓扑次序的序列,简称为拓扑序列。

 

二. 算法

 

a)扫描顶点表,将入度为零的顶点入栈;

b)当栈非空时:

输出栈顶元素v,出栈;

检查v的出边,将每条出边的终端顶点的入度减1,若该顶点入度为0,入栈;

c)当栈空时,若输出的顶点小于顶点数,则说明AOV网有回路,否则拓扑排序完成。

 

 三. 实现

 

public static int topSort() {
		int i,j,k = 0;
		boolean isSure = true;
		int countNonPre = 0;
		initial();
		countInDegree();
		int top = -1;
		for (j = 0, countNonPre = 0; j < n; j++) {
			if (indegree[j] == 0) {
				countNonPre ++;
				indegree[j] = top;
				top = j;
			}
		}
		if (countNonPre == 0)
			return 0; 			// 存在环,矛盾
		if (countNonPre > 1) 	// 多个先驱节点
			isSure = false;
		for(i = 0;i < n; i++) {                               //结点个数
			if(top == -1) {		//存在环
				isSure = true;
				return 0;
			}
			int now = top;			//now top都是入度为0的点的下标,相当于两个指针
			top = indegree[top];
			result[k++] = (char) (now + 'A');
			countNonPre = 0;
			indegree[now] = -1;
			for(j = 0; j < n; j++) {
				if(map[now][j]) {
					indegree[j]--;
					if(indegree[j] == 0) {
						countNonPre ++;
						indegree[j] = top;
						top = j;
					}
				}
			}
			if(countNonPre > 1) {	//有多个先驱节点,还要继续判断有没有环
				isSure = false;
				countNonPre = 0;
			}
		}
		if(!isSure) return 2;	// 多个先驱节点
		return 1;				// 找到!
	}

 

   通常的拓扑算法要用两个数组,一个用来记录每个顶点的入度,当入度为0,则进栈
   。另一个数组用作栈数组,记录入度为0的顶点。其实当入度为0的顶点进栈以后,indegree[i]
   =0就不再有用,所以可以用indegree[i]记录栈内下一个入度为0的顶点,top指向栈顶顶点号。

 

四. 应用

     神经网络。

 

参考:http://dev.csdn.net/author/fisher_jiang/ebb96def8ef44f00a88db5fffd4e2e9e.html

 

 

参见poj1094 

 

 

 

 

分享到:
评论

相关推荐

    数据结构课设拓扑排序源代码(教学计划安排)

    "拓扑排序在教学计划安排中的应用" 数据结构是计算机科学的基础课程,拓扑排序是数据结构中的一种重要算法。拓扑排序是一种基于有向无环图(DAG)的排序算法,可以应用于教学计划的安排。根据课程之间的依赖关系,...

    简单拓扑排序——源码

    拓扑排序是图论中的一个重要概念,主要应用于有向无环图(DAG,Directed Acyclic Graph)。在这样的图中,节点之间的关系是有方向性的,而拓扑排序就是找到一个线性的顺序,使得对于每一条边 (u, v),节点 u 都在这...

    拓扑排序 整体 拓扑排序

    拓扑排序是图论中的一个重要概念,主要应用于有向无环图(DAG,Directed Acyclic Graph)。在计算机科学中,特别是在数据结构和算法领域,拓扑排序常常用于解决依赖关系的排序问题,例如课程安排、任务调度等场景。...

    拓扑排序关键路径算法C语言完整代码

    在计算机科学中,拓扑排序和关键路径算法是两种重要的图论概念,广泛应用于项目管理、任务调度等领域。本文将详细介绍这两个概念,并提供一个用C语言实现的完整代码示例。 **拓扑排序(Topological Sorting)** 拓扑...

    数据结构拓扑排序课程设计.docx

    【拓扑排序】是图论中的一个重要概念,用于对有向无环图(DAG,Directed Acyclic Graph)进行线性排序。在这个过程中,我们尝试按照一定的顺序排列顶点,使得对于图中的每一条有向边 (u, v),顶点 u 总是出现在顶点 ...

    拓扑排序开发教程文档.docx

    拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序...

    AOV网与拓扑排序

    4. **拓扑排序实现**:`Top_Sort`函数实现了拓扑排序的核心逻辑。首先调用`FindInDegree`函数更新顶点的入度,然后使用一个类似栈的数据结构(这里利用了顶点数组的`indegree`字段作为栈指针)来存储入度为0的顶点,...

    操作系统 拓扑排序算法

    任意给定一个有向图,设计一个算法,对它进行拓扑排序。拓扑排序算法思想:a.在有向图中任选一个没有前趋的顶点输出;b.从图中删除该顶点和所有以它为尾的弧;c.重复上述a、b,直到全部顶点都已输出,此时,顶点输出...

    有向图的拓扑排序

    对于有向图进行拓扑排序,图使用邻接矩阵的存储结构。

    图的最短路径、拓扑排序和关键路径

    "图的最短路径、拓扑排序和关键路径" 图的最短路径是图论中的一种重要概念,它是指从图的一顶点到另一顶点的路径中,所经过的边的数目最少的那条路径。这种路径也可以称作最短距离或最短路径长度。在无权图中,图的...

    数据结构课程设计——拓扑排序和关键路径

    数据结构课程设计中,拓扑排序和关键路径是两个重要的概念,它们在计算机科学和工程领域,尤其是在项目管理和网络优化中具有广泛的应用。 拓扑排序是对有向无环图(DAG,Directed Acyclic Graph)的一种线性排序,...

    拓扑排序的演示

    拓扑排序是图论中的一个重要概念,特别是在有向无环图(DAG,Directed Acyclic Graph)中。在这个课程设计中,我们很可能涉及到如何通过编程实现拓扑排序的方法,这通常用于解决任务调度、依赖关系排序等问题。让...

    数据结构课程设计 图的遍历和拓扑排序

    本次课程设计的重点是“图的遍历”和“拓扑排序”,这两个主题都是图论在数据结构中的具体应用。 **图的遍历** 图是由顶点(vertices)和边(edges)构成的数据结构,用于表示对象之间的关系。在图的遍历中,我们...

    拓扑排序和关键路径课设

    ### 拓扑排序与关键路径的实现及应用 #### 1. 拓扑排序的概念及应用 拓扑排序是一种特殊的线性排序方法,它适用于有向无环图(Directed Acyclic Graph, DAG),其主要目的是确定一个图中各顶点的线性顺序,使得...

    c语言拓扑排序算法

    拓扑排序(Topological Sort)是一种针对有向无环图(DAG, Directed Acyclic Graph)进行排序的方法。这种排序方式对于图中的每个顶点,可以得到一个线性顺序,使得对于所有的有向边`(u, v)`来说,顶点`u`在排序结果...

    拓扑排序数据结构

    拓扑排序是图论中的一个重要概念,特别是在有向无环图(DAG,Directed Acyclic Graph)中。在计算机科学中,数据结构和算法的设计往往涉及到拓扑排序的应用,例如在任务调度、编译器的依赖关系分析以及网络流量优化...

    拓扑排序(C语言原代码)

    拓扑排序是图论中的一个概念,用于有向无环图(DAG,Directed Acyclic Graph)的排序。在这个场景下,拓扑排序是将所有顶点排成一个线性序列,使得对于每一条有向边 (u, v),顶点 u 在序列中都出现在顶点 v 之前。在...

    c语言实现图的拓扑排序

    拓扑排序是对有向无环图(DAG,Directed Acyclic Graph)的一种线性排序,它使得对于图中的每一条有向边 (u, v),节点 u 的排序位置总是在节点 v 之前。在实际应用中,例如课程安排、项目依赖关系解决等场景,拓扑...

    拓扑 排序 C语言 算法

    拓扑排序是图论中的一个重要概念,主要用于有向无环图(DAG,Directed Acyclic Graph)。在C语言中实现拓扑排序算法,可以帮助我们理解数据结构与算法的基础,并为解决实际问题提供工具。下面将详细阐述拓扑排序的...

Global site tag (gtag.js) - Google Analytics