Assuming we have the China Map.
And we have 2 axises, so, this is a matrix.
The axis is an array of all the cities of China.
If 2 cities are neighbours, matrix coordinate is 1, or else 0.
So this is a graph.
We need to traverse this map, and each neighbouring places have a distance, by traversing, we can get the total distance between the 2 cities.
Using breadth first traversal or depth first traversal.
DFS实现示例(使用递归和栈)
python# 使用邻接表表示图
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E'],
}
visited = set() # 用于记录已访问的节点
def dfs(visited, graph, node):
if node not in visited:
print(node) # 访问节点
visited.add(node)
for neighbour in graph[node]:
dfs(visited, graph, neighbour) # 递归访问邻居节点
# 从节点'A'开始深度优先搜索
dfs(visited, graph, 'A')
BFS实现示例(使用队列)
pythonfrom collections import deque
# 使用邻接表表示图
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E'],
}
visited = set() # 用于记录已访问的节点
queue = deque() # 队列用于BFS
def bfs(visited, graph, root):
visited.add(root)
queue.append(root)
while queue:
vertex = queue.popleft() # 弹出队列中的第一个节点
print(vertex, end=" ") # 访问节点
for neighbour in graph[vertex]:
if neighbour not in visited:
visited.add(neighbour)
queue.append(neighbour) # 将未访问的邻居节点加入队列
# 从节点'A'开始广度优先搜索
bfs(visited, graph, 'A')