一.定义
拓扑排序就是在一个有向无环图中,将所有顶点排成一个线性序列,使得在途中任意一对定点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
分享到:
相关推荐
拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序
课题二 拓扑排序 2.1 问题的提出2.1 问题的提出 任务:编写函数实现图的拓扑排序。 程序所实现的功能: 建立对应的邻接表,对该图进行拓扑排序,并显示排序结果。 输入: 顶点数, 边数及各顶点信息(数据格式为整形...
任意给定一个有向图,设计一个算法,对它进行拓扑排序。拓扑排序算法思想:a.在有向图中任选一个没有前趋的顶点输出;b.从图中删除该顶点和所有以它为尾的弧;c.重复上述a、b,直到全部顶点都已输出,此时,顶点输出...
对于有向图进行拓扑排序,图使用邻接矩阵的存储结构。
C语言实现图的拓扑排序
拓扑排序与关键路径.pptx拓扑排序与关键路径.pptx拓扑排序与关键路径.pptx拓扑排序与关键路径.pptx拓扑排序与关键路径.pptx拓扑排序与关键路径.pptx拓扑排序与关键路径.pptx拓扑排序与关键路径.pptx拓扑排序与关键...
拓扑排序关键路径算法C语言完整代码,vs2013下编译运行通过
拓扑排序源码,程序简单易懂,注释详细。希望对学习数据结构的朋友有所帮助。
拓扑排序
数据结构课设报告,包括完整源代码,用拓扑排序算法安排有先后制约关系的课程的教学计划。
C# 图 拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑...
阅读了《数据结构(C语言)》的经典著作后...本次算法课程设计运用所学的图论的拓扑排序和关键路径,去实现工程中的花费时间和顺利进行问题。拓扑排序主要用于检验工程能否施工,关键路径主要用于看出工程施工时间消耗。
基于邻接表存储的图的拓扑排序算法,学习C++和理解数据结构很有帮助
图的最短路径、拓扑排序和关键路径相关算法描述,有c++code
拓扑排序 数据结构 c和 C++源程序代码 拓扑排序 数据结构 c和 C++源程序代码
c语言拓扑排序算法
拓扑排序
C实现的拓扑排序,有详细注释,有问题的我们一起讨论
利用拓扑排序判断有向图是否存在一个简单又向回路,若存在,输出该回路