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)