leetcode 399. 除法求值
class Solution {
public:
vector<double> calcEquation(vector<vector<string>>& equations, vector<double>& values, vector<vector<string>>& queries) {
unordered_map<string, int> ma;
int n = 1;
for(int i=0; i<equations.size(); i++){
if(!ma[equations[i][0]])
ma[equations[i][0]] = n++;
if(!ma[equations[i][1]])
ma[equations[i][1]] = n++;
}
int vis[n][n];
double val[n][n];
memset(vis, 0, sizeof(vis));
for(int i=0; i<values.size(); i++){
int x = ma[equations[i][0]], y = ma[equations[i][1]];
vis[x][y] = 1;
vis[y][x] = 1;
val[x][y] = values[i];
val[y][x] = 1/values[i];
}
for(int k=1; k<n; k++)
for(int i=1; i<n; i++)
for(int j=1; j<n; j++)
if(vis[i][j]==0 && vis[i][k]==1 && vis[k][j]==1){
vis[i][j] = 1;
val[i][j] = val[i][k] * val[k][j];
}
vector<double> ans;
for(int i=0; i<queries.size(); i++){
if(ma.find(queries[i][0])==ma.end() || ma.find(queries[i][1])==ma.end()){
ans.push_back(-1);
continue;
}
if(vis[ma[queries[i][0]]][ma[queries[i][1]]] == 1)
ans.push_back(val[ma[queries[i][0]]][ma[queries[i][1]]]);
else
ans.push_back(-1);
}
return ans;
}
};