研究帮助:路径寻找算法

时间:2016-10-18 18:12:55

标签: algorithm dijkstra path-finding

这不是一个技术问题,只是要求我的研究方向正确。

是否有任何型号可以解决以下问题:

找到从X开始的路线,该路线以最有效的顺序通过A,B,C。在下面的情况中,X,A,C,B是最佳路径(12)。

由于

2 个答案:

答案 0 :(得分:0)

你可能想看看旅行推销员。由于这是一个非常常见的编程问题,因此有很多资源可以实现它。 https://en.wikipedia.org/wiki/Travelling_salesman_problem

答案 1 :(得分:0)

这是Python中Dijkstra's Algorithm的实现:

headers['saved']

打印:

def find_all_paths(graph, start, end, path=[]):
    required=('A', 'B', 'C')
    path = path + [start]
    if start == end:
        return [path]
    if start not in graph:
        return []
    paths = []
    for node in graph[start]:
        if node not in path:
            newpaths = find_all_paths(graph, node, end, path)
            for newpath in newpaths:
                if all(e in newpath for e in required):
                    paths.append(newpath)
    return paths       

def min_path(graph, start, end):
    paths=find_all_paths(graph,start,end)
    mt=10**99
    mpath=[]
    print '\tAll paths:',paths
    for path in paths:
        t=sum(graph[i][j] for i,j in zip(path,path[1::]))
        print '\t\tevaluating:',path, t
        if t<mt: 
            mt=t
            mpath=path

    e1=' '.join('{}->{}:{}'.format(i,j,graph[i][j]) for i,j in zip(mpath,mpath[1::]))
    e2=str(sum(graph[i][j] for i,j in zip(mpath,mpath[1::])))
    print 'Best path: '+e1+'   Total: '+e2+'\n'  

if __name__ == "__main__":
    graph = {'X': {'A':5, 'B':8, 'C':10},
             'A': {'C':3, 'B':5},
             'C': {'A':3, 'B':4},
             'B': {'A':5, 'C':4}}
    min_path(graph,'X','B')

'guts'以递归方式查找所有路径并仅过滤到访问所需节点 All paths: [['X', 'A', 'C', 'B'], ['X', 'C', 'A', 'B']] evaluating: ['X', 'A', 'C', 'B'] 12 evaluating: ['X', 'C', 'A', 'B'] 18 Best path: X->A:5 A->C:3 C->B:4 Total: 12 的路径。然后将路径相加以找出最小路径费用。

肯定有更有效的方法,但很难简化。你问了一个模型,所以这是一个有效的实现。

相关问题