Equations are given in the format A / B = k, where A and B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the answers. If the answer does not exist, return -1.0.
1 2 3 4
Example: Given a / b = 2.0, b / c = 3.0. queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? . return [6.0, 0.5, -1.0, 1.0, -1.0 ].
The input is: vector<pair<string, string>> equations, vector& values, vector<pair<string, string>> queries , where equations.size() == values.size(), and the values are positive. This represents the equations. Return vector.
The input is always valid. You may assume that evaluating the queries will result in no division by zero and there is no contradiction.
Solution:
Think every character as a node, the equation result would be the weight between them. In addition, if we have a equation from a to b, then we can also get b to a. ex:
1 2 3 4 5 6 7
if we know a->b, weight= 2.0
then b->a, would be (1/2.0)= 0.5 a->a, would be 1 b->b, 1
After we generate the graph, we can use BFS to scan the graph. Use an unordered_set to store every node that already visited.