当前位置:嗨网首页>书籍在线阅读

04-边和图的用法

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

边和图的用法

现在我们已经有了 EdgeGraph 的具体实现,接下来就可以创建超级高铁网络的表现形式了。 city_graph 中的顶点和边对应于图4-2中的顶点和边。我们用泛型就可以指定顶点的类型为 strGraph [str] )。换句话说,用 str 类型填充类型变量 V 。具体代码如代码清单4-4所示。

代码清单4-4 graph.py(续)

if __name__ == "__main__":
   # test basic Graph construction
   city_graph: Graph[str] = Graph(["Seattle", "San Francisco", "Los Angeles",
     "Riverside", "Phoenix", "Chicago", "Boston", "New York", "Atlanta", "Miami",
 "Dallas", "Houston", "Detroit", "Philadelphia", "Washington"])
   city_graph.add_edge_by_vertices("Seattle", "Chicago")
   city_graph.add_edge_by_vertices("Seattle", "San Francisco")
   city_graph.add_edge_by_vertices("San Francisco", "Riverside")
   city_graph.add_edge_by_vertices("San Francisco", "Los Angeles")
   city_graph.add_edge_by_vertices("Los Angeles", "Riverside")
   city_graph.add_edge_by_vertices("Los Angeles", "Phoenix")
   city_graph.add_edge_by_vertices("Riverside", "Phoenix")
   city_graph.add_edge_by_vertices("Riverside", "Chicago")
   city_graph.add_edge_by_vertices("Phoenix", "Dallas")
   city_graph.add_edge_by_vertices("Phoenix", "Houston")
   city_graph.add_edge_by_vertices("Dallas", "Chicago")
   city_graph.add_edge_by_vertices("Dallas", "Atlanta")
   city_graph.add_edge_by_vertices("Dallas", "Houston")
   city_graph.add_edge_by_vertices("Houston", "Atlanta")
   city_graph.add_edge_by_vertices("Houston", "Miami")
   city_graph.add_edge_by_vertices("Atlanta", "Chicago")
   city_graph.add_edge_by_vertices("Atlanta", "Washington")
   city_graph.add_edge_by_vertices("Atlanta", "Miami")
   city_graph.add_edge_by_vertices("Miami", "Washington")
   city_graph.add_edge_by_vertices("Chicago", "Detroit")
   city_graph.add_edge_by_vertices("Detroit", "Boston")
   city_graph.add_edge_by_vertices("Detroit", "Washington")
   city_graph.add_edge_by_vertices("Detroit", "New York")
   city_graph.add_edge_by_vertices("Boston", "New York")
   city_graph.add_edge_by_vertices("New York", "Philadelphia")
   city_graph.add_edge_by_vertices("Philadelphia", "Washington")
   print(city_graph)

city_graph 的顶点为 str 类型,这里就用MSA的名称来标识每个顶点,且与边加入 city_graph 的顺序没有关系。因为已经编写了 __str__() ,图的美观打印形式已经具备了,所以现在可以将图美观打印(pretty-print,它真是一个术语)出来。输出应该类似如下所示:

Seattle -> ['Chicago', 'San Francisco']
San Francisco -> ['Seattle', 'Riverside', 'Los Angeles']
Los Angeles -> ['San Francisco', 'Riverside', 'Phoenix']
Riverside -> ['San Francisco', 'Los Angeles', 'Phoenix', 'Chicago']
Phoenix -> ['Los Angeles', 'Riverside', 'Dallas', 'Houston']
Chicago -> ['Seattle', 'Riverside', 'Dallas', 'Atlanta', 'Detroit']
Boston -> ['Detroit', 'New York']
New York -> ['Detroit', 'Boston', 'Philadelphia']
Atlanta -> ['Dallas', 'Houston', 'Chicago', 'Washington', 'Miami']
Miami -> ['Houston', 'Atlanta', 'Washington']
Dallas -> ['Phoenix', 'Chicago', 'Atlanta', 'Houston']
Houston -> ['Phoenix', 'Dallas', 'Atlanta', 'Miami']
Detroit -> ['Chicago', 'Boston', 'Washington', 'New York']
Philadelphia -> ['New York', 'Washington']
Washington -> ['Atlanta', 'Miami', 'Detroit', 'Philadelphia']