from collections import defaultdict
from graphviz import Digraph
def create_graph(node_relations):
graph = defaultdict(list)
for u, v in node_relations:
graph[u].append(v)
return graph
def topological_sort(graph):
visited = {}
for key, values in graph.items():
visited[key] = False
for val in values:
visited[val] = False
stack = []
def topological_sort_util(v):
visited[v] = True
for node in graph[v]:
if not visited[node]:
topological_sort_util(node)
stack.insert(0, v)
for node in visited.keys():
if not visited[node]:
topological_sort_util(node)
return stack
def draw_graph(node_relations):
dot = Digraph(comment='node graph', filename='blueprintNodeGraph-neato', format='png', engine='neato')
dot.attr('node', shape='box', style='rounded,filled', fixedsize='false', fontname='Microsoft YaHei', fontsize='12')
node_size = 0
for relation in node_relations:
node_size += 1
dot.edge(relation[0], relation[1], len='3')
dot.render(directory='doctest-output', view=True).replace('\\', '/')
if __name__ == '__main__':
# 通过用户界面输入节点关系
node_relations_input = input("请输入节点关系,以换行分隔:")
# 创建关系图
node_relations = [tuple(relation.strip('<> ').split(',')) for relation in node_relations_input.split('\n')]
# 进行拓扑排序
graph = create_graph(node_relations)
sorted_nodes = topological_sort(graph)
# 输出拓扑排序结果
print("拓扑排序结果:")
for node in sorted_nodes:
print(node)
# 绘制关系图并显示在界面上
draw_graph(node_relations)
想问如何修改这个代码吗,项目输入要求是一行定义一个关系,西文下的尖括号<a,b>,可是每次输入时按换行符就会自动运行,如果复制粘贴,也只读取第一行节点关系
题目要求是
谢谢Thanks♪(・ω・)ノ