Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找包含未排序数据的路径_Python_Algorithm_Graph Algorithm - Fatal编程技术网

Python 查找包含未排序数据的路径

Python 查找包含未排序数据的路径,python,algorithm,graph-algorithm,Python,Algorithm,Graph Algorithm,我有以下数据: data = [ {"start": "MIA", "end": "FCA"}, {"start": "FCA", "end": "GVK"}, {"start": "GVK", "end": "LSD"} ] 有了这些数据,我需要找到一条路径。在上述情况下,路径将是从MIA到FCA,然后是FCA到GVK,最后是GVK到LSD。路径永远不会有分支,也不会返回到它已经通过的点,没有循环。作为输出,我只需要获得数据数组中每个元素的结束点:[“FCA”、“GV

我有以下数据:

data = [
    {"start": "MIA", "end": "FCA"},
    {"start": "FCA", "end": "GVK"},
    {"start": "GVK", "end": "LSD"}
]
有了这些数据,我需要找到一条路径。在上述情况下,路径将是从
MIA
FCA
,然后是
FCA
GVK
,最后是
GVK
LSD
。路径永远不会有分支,也不会返回到它已经通过的点,没有循环。作为输出,我只需要获得
数据
数组中每个元素的
结束点:
[“FCA”、“GVK”、“LSD”]

所以,这就是我尝试过的:

def find_path(connections, counter, data):
    if connections[-1] == data[counter]["start"]:
        connections.append(data[counter]["end"])
        if len(connections) == len(data):
            return connections
    return find_path(connections, counter+1, data)
它只有在对
数据
进行排序时才起作用。但是当我改变
数据时,就像这样:

data = [
    {"start": "FCA", "end": "GVK"},
    {"start": "MIA", "end": "FCA"},
    {"start": "GVK", "end": "LSD"}
]
它失败了

问题:实现这一目标的捷径是什么


我曾考虑在到达数据末尾时重置函数顶部的
计数器
如果计数器==len(data)else计数器
,则计数器=0,但有了这个,我将不得不在
连接
索引处打折:
如果连接[-1]==data[计数器][“start”]:
并将
数据
元素追加到此处的不同位置:
连接。追加(数据[计数器][“结束])
。我觉得有点乱了。

下面的递归函数可以完成这项工作:

data = [
    {"start": "FCA", "end": "GVK"},
    {"start": "MIA", "end": "FCA"},
    {"start": "GVK", "end": "LSD"}
]

def find_path(data, start='', result=[]):
    l = data.copy()
    for d in data:
        if d['start'] == start:
            result.append(d['end'])
            l.remove(d)
            find_path(l, result[-1], result)
    return result

print(find_path(data, 'MIA'))
输出:

['FCA', 'GVK', 'LSD']

1.建立一个图表。2.使用标准的图形搜索算法。进一步阅读:哦,很好。我没有意识到这会是一个图形问题。我试试这个。谢谢