参考了这篇回答
class Solution:
def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]:
graph = {}
for i in range(len(equations)):
if equations[i][0] in graph:
graph[equations[i][0]].append((equations[i][1],values[i]))
else:
graph[equations[i][0]]=[(equations[i][1],values[i])]
if equations[i][1] in graph:
graph[equations[i][1]].append((equations[i][0],1/values[i]))
else:
graph[equations[i][1]]=[(equations[i][0],1/values[i])]
def find_path(query):
b, e = query
if b not in graph or e not in graph:
return -1.0
q = collections.deque([(b, 1.0)])
visited = set()
while q:
front, cur_product = q.popleft()
if front == e:
return cur_product
visited.add(front)
for neighbor, value in graph[front]:
if neighbor not in visited:
q.append((neighbor, cur_product*value))
return -1.0
return [find_path(q) for q in queries]
结果: