399. 除法求值
使用图的思想就可以解决
class Solution {
public:
unordered_map<string,unordered_map<string,double>> graph;
vector<double> calcEquation(vector<vector<string>>& equations, vector<double>& values, vector<vector<string>>& queries) {
buildGraph(equations,values);
vector<double> ans;
for(int i=0;i<queries.size();++i)
{
unordered_set<string> visited;
ans.push_back(dfs(queries[i][0],queries[i][1],visited));
}
return ans;
}
void buildGraph(vector<vector<string>> &equations,vector<double> &values)
{
for(int i=0;i<equations.size();++i)
{
graph[equations[i][0]][equations[i][1]] = values[i];
graph[equations[i][1]][equations[i][0]] = 1.0 / values[i];
graph[equations[i][0]][equations[i][0]] = 1.0;
graph[equations[i][1]][equations[i][1]] = 1.0;
}
}
double dfs(string src ,string dst, unordered_set<string> &visited)
{
if(graph.find(src) == graph.end() || graph.find(dst) == graph.end())
{
return -1.0;
}
if(graph[src].find(dst) != graph[src].end())
{
return graph[src][dst];
}
double ret = 1.0;
for(auto [u,v] : graph[src])
{
if(!visited.count(u))
{
visited.insert(u);
double val = dfs(u,dst,visited);
if(val != -1.0)
{
ret = graph[src][u] * val;
return ret;
}
}
}
return -1.0;
}
};