输入地图上的坐标点以及基地点坐标,利用dijkstra算法求出基地点到地图上各点的最短距离,写出它的完整代码
时间: 2023-06-14 11:03:32 浏览: 92
dijkstra算法实现两景点间最短路径
以下是基于Python语言实现Dijkstra算法的完整代码,可以求出基地点到地图上各点的最短距离。其中,输入地图上的坐标点以及基地点坐标时,需要将它们存储在一个二维数组中。
```python
import sys
class Graph():
def __init__(self, vertices):
self.V = vertices
self.graph = [[0 for column in range(vertices)]
for row in range(vertices)]
def printSolution(self, dist):
print("Vertex \t Distance from Source")
for node in range(self.V):
print(node, "\t\t", dist[node])
def minDistance(self, dist, sptSet):
min = sys.maxsize
for v in range(self.V):
if dist[v] < min and sptSet[v] == False:
min = dist[v]
min_index = v
return min_index
def dijkstra(self, src):
dist = [sys.maxsize] * self.V
dist[src] = 0
sptSet = [False] * self.V
for cout in range(self.V):
u = self.minDistance(dist, sptSet)
sptSet[u] = True
for v in range(self.V):
if (self.graph[u][v] > 0 and
sptSet[v] == False and
dist[v] > dist[u] + self.graph[u][v]):
dist[v] = dist[u] + self.graph[u][v]
self.printSolution(dist)
# 测试代码
g = Graph(9)
g.graph = [[0, 4, 0, 0, 0, 0, 0, 8, 0],
[4, 0, 8, 0, 0, 0, 0, 11, 0],
[0, 8, 0, 7, 0, 4, 0, 0, 2],
[0, 0, 7, 0, 9, 14, 0, 0, 0],
[0, 0, 0, 9, 0, 10, 0, 0, 0],
[0, 0, 4, 14, 10, 0, 2, 0, 0],
[0, 0, 0, 0, 0, 2, 0, 1, 6],
[8, 11, 0, 0, 0, 0, 1, 0, 7],
[0, 0, 2, 0, 0, 0, 6, 7, 0]]
g.dijkstra(0)
```
以上代码中,我们创建了一个Graph类,其中self.V表示图中的顶点数,self.graph表示邻接矩阵。然后我们定义了printSolution函数,用于打印从基地点到各点的最短距离。minDistance函数用于寻找未处理的节点中距离基地点最近的节点。dijkstra函数用于实现Dijkstra算法。
测试代码中,我们创建了一个9个顶点的图,其中self.graph存储了各个节点之间的距离。然后我们调用dijkstra函数,传入基地点的索引作为参数,来求出基地点到各个节点的最短距离。最后调用printSolution函数来打印结果。
阅读全文