题目
解法:bellman ford
这个题目本质上还是个图中求最短路径的问题
参考leetcode Path With Minimum Effort解法
class Solution:
def maxProbability(self, n: int, edges: List[List[int]], succProb: List[float], start: int, end: int) -> float:
graph = collections.defaultdict(list)
for edge in edges:
graph[edge[0]].append(edge[1])
graph[edge[1]].append(edge[0])
edge2prob = {
}
for i,edge in enumerate(edges):
edge2prob[(edge[0],edge[1])] = succProb[i]
edge2prob[(edge[1],edge[0])] = succProb[i]
q = collections.deque()
q.append((start,1))
prob_vec = [0]*n
#ans = 0
while q:
node,prob = q.popleft()
for nei in graph[node]:
new_prob = edge2prob[(nei,node)]*prob
if new_prob>prob_vec[nei]:
q.append((nei,new_prob))
prob_vec[nei] = new_prob
return prob_vec[end]
解法2:Dijkstra
class Solution:
def maxProbability(self, n: int, edges: List[List[int]], succProb: List[float], start: int, end: int) -> float:
graph = collections.defaultdict(list)
for edge in edges:
graph[edge[0]].append(edge[1])
graph[edge[1]].append(edge[0])
edge2prob = {
}
for i,edge in enumerate