在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting)。
也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点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);