Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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/10.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 3.x 计算完整图中的距离度量_Python 3.x_Algorithm - Fatal编程技术网

Python 3.x 计算完整图中的距离度量

Python 3.x 计算完整图中的距离度量,python-3.x,algorithm,Python 3.x,Algorithm,假设我有一个数组,即MapMap[i][j]表示区域i和区域j之间的距离。根据这一定义,我们得到: a) Map[i][i]始终等于0 b) Map[i][k]area1-->area0},路线距离Map[0][1]+Map[1][0]=2+2=4 想知道这样做的最佳方法是什么吗?你可以使用A*算法,使用Map[i][j]作为到目标节点的最小剩余距离的启发式(假设,如你所说,Map[i][j]=k,或[4,4,3],[4,2,5],[3,5,2]用于len path)==k不要以内置的名称命名。

假设我有一个数组,即
Map
Map[i][j]
表示区域
i
和区域
j
之间的距离。根据这一定义,我们得到:

a)
Map[i][i]
始终等于0

b)
Map[i][k]
area1
-->
area0
},路线距离
Map[0][1]
+
Map[1][0]
=2+2=4


想知道这样做的最佳方法是什么吗?

你可以使用A*算法,使用
Map[i][j]
作为到目标节点的最小剩余距离的启发式(假设,如你所说,
Map[i][j]=k
,或
[4,4,3],[4,2,5],[3,5,2]
用于
len path)==k

不要以内置的名称命名。如果您指定
map=[1,2,3]
您将其阴影化,那么已经有一个名为
map()
的东西了-因为现在
map
指向一个列表,而不再指向
map()
功能。我想你可以做Dijkstra's,在巡演结束之前不要停止。还有:
map[I][k]是不是所有区域都相互连接?如果是这样,你可能会得到
0->1(1是最低距离)->0->1->0->0->0,因为k==5和0->0
你可能需要指定一些更多的规则,比如:后退,圆圈(0->1->2->0->1代表0->1和k=3)等等…@tobias_k是的,
Map[i][k]@PatrickArtner路由{0->1(1是最低距离)->0->1->0->1->0}对
k=5
无效,因为只计算不同的区域。路由{0->1->0->1->0}只经过两个不同的区域。
def func(Map,k):
    n=len(Map)    
    D_temp = [list(x) for x in Map]
    D = [list(x) for x in Map]
    for m in range(k - 1):    
        for i in range(n):
            for j in range(n):
                tmp = [D[i][x] + Map[x][j] for x in range(n) if x != i and x != j]
                D_temp[i][j] = min(tmp)
        D = [list(x) for x in D_temp]
    return D
func([[0, 2, 3], [2, 0, 1], [3, 1, 0]],2)
import heapq
def min_path(Map, k, i, j):
    heap = [(0, 0, i, [])]
    while heap:
        _, cost, cur, path = heapq.heappop(heap)
        if cur == j and len(path) >= k:
            return cost
        for other in range(len(Map)):
            if other != cur:
                c = cost + Map[cur][other]
                heapq.heappush(heap, (c + Map[other][j], c, other, path + [other]))
def func(Map, k):
    n = len(Map)  
    return [[min_path(Map, k, i, j) for i in range(n)] for j in range(n)]
res = func([[0, 2, 3], [2, 0, 1], [3, 1, 0]], 2)