有向无环图拓扑排序(python实现)
问题:有向无环图的拓扑排序
题目描述
由某个集合上的一个偏序得到该集合上的一个全序,这个操作被称为拓扑排序。偏序和全序的定义分别如下:
若集合X上的关系R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。
设R是集合X上的偏序,如果对每个x,y∈X必有xRy或yRx,则称R是集合X上的全序关系。
由偏序定义得到拓扑有序的操作便是拓扑排序。
拓扑排序的流程如下:
在有向图中选一个没有前驱的顶点并且输出之;
从图中删除该顶点和所有以它为尾的弧。
重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。后一种情况则说明有向图中存在环。
采用邻接表存储有向图,并通过栈来暂存所有入度为零的顶点,可以描述拓扑排序的算法如下:
在本题中,读入一个有向图的邻接矩阵(即数组表示),建立有向图并按照以上描述中的算法判断此图是否有回路,如果没有回路则输出拓扑有序的顶点序列。
输入
输入的第一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。
以后的n行中每行有n个用空格隔开的整数0或1,对于第i行的第j个整数,如果为1,则表示第i个顶点有指向第j个顶点的有向边,0表示没有i指向j的有向边。当i和j相等的时候,保证对应的整数为0。
输出
如果读入的有向图含有回路,请输出“ERROR”,不包括引号。
如果读入的有向图不含有回路,请按照题目描述中的算法依次输出图的拓扑有序序列,每个整数后输出一个空格。
请注意行尾输出换行。
样例输入
4
0 1 0 0
0 0 1 0
0 0 0 0
0 0 1 0
样例输出
3 0 1 2
n=0
G=[[] for i in range(100)]
inDegree=[0]*100
def topologicalSort():global n,G,inDegreelist=[]list_1=[]num=0for i in range(0,n):if inDegree[i]==0:list.append(i)while len(list)!=0:t=list[-1]list_1.append(t)list.pop(-1)for i in range(len(G[t])):v=G[t][i]inDegree[v]-=1if inDegree[v]==0:list.append(v)G[t].clear()num+=1if num==n:for i in list_1:print(i,end=' ')else:print("ERROR")
if __name__=='__main__':n = int(input())for i in range(0, n):ar = input()b = ar.split(' ')graph = [int(i) for i in b]for j in range(len(graph)):if graph[j] == 1 and i!=j:inDegree[j]+=1G[i].append(j)topologicalSort()print()
有向无环图拓扑排序(python实现)相关推荐
- 有向无环图—拓扑序列
拓扑序列是对有向无环图的节点编号的排序使得满足任意一条边的起点都在终点的前面,例如: 1->2, 3->2 的有向无环图的一个拓扑序列为1,3,2. 任何一个有向无环图都至少有一个拓扑序列 ...
- java 有向无环图 树_拓扑排序-有向无环图(DAG, Directed Acyclic Graph)
条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...
- 有向无环图—关键路径详解(最通俗易懂的版本)【数据结构】
文章目录 有向无环图 拓扑排序 AOV-网 AOE-网 关键路径的概念 事件的最早/晚开始时间 事件和活动的区分 活动的最早/晚开始时间 有向无环图 拓扑排序 AOV-网 由于有向无环图可以用一种自然 ...
- 【图论】有向无环图的拓扑排序
1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...
- C#实现有向无环图(DAG)拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...
- 有向无环图的拓扑排序
拓扑排序 对于一个有向无环图,我们可以这样确定一个图中顶点的顺序: 对于所有的u.v,若存在有向路径u-->v,则在最后的顶点排序中u就位于v之前.这样确定的顺序就是一个图的拓扑排序. ...
- LeetCode 2192. 有向无环图中一个节点的所有祖先(拓扑排序)
文章目录 1. 题目 2. 解题 1. 题目 给你一个正整数 n ,它表示一个 有向无环图 中节点的数目,节点编号为 0 到 n - 1 (包括两者). 给你一个二维整数数组 edges ,其中 ed ...
- 有向无环图DAG 拓扑排序 代码解释
目录: DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化 定义 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological ...
- 有向无环图中的拓扑排序
´有向无环图(DAG),指不存在环的有向图 ´点的入度,指以这个点为结束点的边数 ´点的出度,指以这个点为出发点的边数 ´拓扑序就是对于节点的一个排列使得若(u,v)∈E,那么u在排列中出现的位置一定 ...
最新文章
- 行情跌宕起伏,或许你可以买这个代币?
- java集合sort底层实现_Java面试总结系列之Collections.sort()
- 【PAT乙级】1092 最好吃的月饼 (20 分)
- CSS3笔记之基础篇(三)文字与字体
- 移除项目中的CocoaPods
- permutation 1(HDU-6628)
- 启动hadoop遇到的datanode启动不了
- 如果Mac在播放音乐时遇到问题,没有声音或无法调整音量,该怎么办呢?
- 精简指令集(MIPS为例)常用指令特点及其格式
- Drawable解析1——ColorDrawable、BitmapDrawable、ClipDrawabl和ScaleDrawable
- java 加载imageview_如何在Android中通过URL加载ImageView? [关闭]
- 新建web项目上传SVN服务器
- 如何把root登陆的shell改为csh?
- 主板声卡坏了会不会有电流声_拯救无声电脑,还能升级音质,独立声卡音频转接头来解决...
- nslookup 查看DNS域名解析
- 从6·18到广袤未来,PC世界需要一位猎光者
- 如何用PHP调用学小易题库,如何使用 PHP 输出 hello world?()
- 聊天室(2)-项目开发文档-李兆龙
- C++ 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对
- java毕业生设计预约健身私教网站计算机源码+系统+mysql+调试部署+lw