使用BFS来求解有向的最短路径问题,主要路径有重合数据
import copy
class Solution:def findShortestPath(self , n: int, m: int, graph: List[List[int]]) -> int:
# write code here
data = graph
graph = {}
graph_value = {}
whole_set = set()
for x in data:
if (x[0], x[1]) not in graph_value.keys():
graph_value.update({(x[0], x[1]):x[2]})
else:
graph_value[(x[0],x[1])] = min(graph_value[(x[0],x[1])], x[2])
if x[0] not in graph.keys():
whole_set.add(x[0])
graph.update({x[0]:[x[1]]})
else:
graph[x[0]].append(x[1])
def solution():
dp = [1000000 for i in range(n+1)]
dp[1] = 0
visited_set = set()
visited_set.add(1)
last_visited_set = set()
while len(visited_set)>0:
tp_visited_set = copy.deepcopy(visited_set)
tp_tp_visited_set = set()
for x in tp_visited_set:
if x in last_visited_set:
continue
last_visited_set.add(x)
if x in graph.keys():
d = graph[x]
for y in d:
# print(x, y, n, graph_value)
dp[y] = min(dp[y], dp[x] + graph_value[(x, y)])
tp_tp_visited_set.add(y)
visited_set = copy.deepcopy(tp_tp_visited_set)
return dp[n]
return solution()