您的位置:首页 > 其它

拓扑排序

2016-05-10 17:10 337 查看
在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting)。

每个顶点出现且只出现一次;

若A在序列中排在B的前面,则在图中不存在从B到A的路径。

也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。



进行拓扑排序的python代码:

class Node:
def __init__(self,id,in_node,out_node):
self.id = id;
self.in_node = in_node;
self.out_node = out_node;

list = [];
list.append(Node(0,[2],[6,1,5]));
list.append(Node(1,[0],[]));
list.append(Node(2,[],[0,3]));
list.append(Node(3,[2],[5]))
list.append(Node(4,[5,6],[]))
list.append(Node(5,[0,3],[4]))
list.append(Node(6,[0,7],[9,4]))
list.append(Node(7,[8],[6]))
list.append(Node(8,[],[7]))
list.append(Node(9,[6],[10,11,12]))
list.append(Node(10,[9],[]))
list.append(Node(11,[9],[12]))
list.append(Node(12,[9,11],[]))

def find_in_empty_node(list):
for node in list:
if(len(node.in_node) == 0):
return node;
return None;

def find_node(list,id):
for node in list:
if(node.id == id):
return node;

def tidy_list(list):
for node in list:
for sub_node in node.in_node:
if(find_node(list,sub_node) == None):
node.in_node.remove(sub_node)

while(1):
node = find_in_empty_node(list);
if(None == node):
break;

print node.id;
list.remove(node);
tidy_list(list);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: