擅长:python、mysql、java
<p>使用<a href="http://networkx.lanl.gov/tutorial/index.html" rel="nofollow">networkx</a>。它很容易安装。在</p>
<p>从游戏板的照片上我认出了苏格兰场的比赛。<br/>
评论您与@Bill the Lizard的对话:<br/>
你确实可以预先计算出前面所有的最短路径。节点和边都不会改变。<br/>
您可以从<code>13</code>到达<code>46</code>,可以通过5个出租车台阶或1个地下台阶。在</p>
<p>我可能会使用一个包含所有边(出租车、公共汽车、地铁)的“大”图,以及几个结合了出租车+公共汽车、出租车+地铁和出租车的图形(我不太记得游戏规则。。。你必须弄清楚什么是有意义的)。在</p>
<p>我不确定networkx中的算法是如何处理关系的!在</p>
<p>所以,预先计算前面的所有最短路径。<br/>
然后只要有需要就去查一下。在</p>
<pre><code>import networkx as nx
# simplified example
# data is in the format as you specified
data = data = {1: [2,3,4],
2: [1,3,5],
3: [1,2,4],
4: [1,3,5],
5: [2,4]}
# initialize empty graph
G = nx.graph()
# now we're adding all edges
# don't bother about duplicates they're ignored
for n1, n in data.items():
for n2 in n:
G.add_edge(n1, n2)
# get ALL shortest paths
p = nx.shortest_path(G)
# lookup when needed, e.g. from 1 to 5
p[1][5]
# gives [1, 2, 5]
</code></pre>