Python 两点之间的最短路径

Python 两点之间的最短路径,python,artificial-intelligence,Python,Artificial Intelligence,我已经找到了许多算法和方法,讨论如何找到两点之间的最短路径,但我遇到的情况是,数据建模为: [(A,B),(C,D),(B,C),(D,E)...] # list of possible paths 如果我们假设我需要从A到E的路径,结果应该是: (A,B)=>(B,C)=>(C,D)=>(D,E) 但是我找不到一个类似蟒蛇的方法来做这个搜索 如果将点视为图中的顶点,将对视为图中的边,则可以为边图边指定等于点之间距离的权重 这样设计你的问题就是经典 你要求用一种类似蟒蛇的方

我已经找到了许多算法和方法,讨论如何找到两点之间的最短路径,但我遇到的情况是,数据建模为:

[(A,B),(C,D),(B,C),(D,E)...] # list of possible paths
如果我们假设我需要从A到E的路径,结果应该是:

(A,B)=>(B,C)=>(C,D)=>(D,E)

但是我找不到一个类似蟒蛇的方法来做这个搜索

如果将点视为图中的顶点,将对视为图中的边,则可以为边图边指定等于点之间距离的权重

这样设计你的问题就是经典


你要求用一种类似蟒蛇的方式来写它。我给出的唯一建议是将图形表示为一个字典,这样每个键都是一个点,返回的值是从该点可以直接访问的其他点的列表。这将加快遍历图形的速度<代码>图形[C]->[B,D]对于您的示例。

python方法是使用模块(如果存在)。在这种情况下,我们知道,有没有,我们可以写

实施

import networkx as nx
G = nx.Graph([('A','B'),('C','D'),('B','C'),('D','E')])
path = nx.shortest_path(G, 'A', 'E')
输出

zip(path, path[1:])
[('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'E')]

下面是一个使用*的解决方案:

pip安装公式==0.2.8

import pyformulas as pf

transitions = [('A', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'F'), ('D', 'F'), ('F', 'D'), ('F', 'B'), ('D', 'E'), ('E', 'C')]

initial_state = ('A',)

def expansion_fn(state):
    valid_transitions = [tn for tn in transitions if tn[0] == state[-1]]
    step_costs = [1 for t in valid_transitions]

    return valid_transitions, step_costs

def goal_fn(state):
    return state[-1] == 'E'

path = pf.discrete_search(initial_state, expansion_fn, goal_fn) # A*
print(path)
输出:

[('A',), ('A', 'B'), ('B', 'C'), ('C', 'F'), ('F', 'D'), ('D', 'E')]

你能描述一下你想使用的算法吗?如果是这样的话,用一种类似蟒蛇的方式来写应该不会太难。如果不是,用python的方式写它是(a)不可能的,(b)不是你应该尝试解决的问题。你在课堂上讨论了什么算法?我假设你做过BFS。那你为什么不试一试呢?BFS需要一个图,但在这种情况下,我只有一个元组列表。你的元组列表是一个图。如果需要不同的图形表示,请将其转换。转换相当简单。