您的位置:首页 > 编程语言 > Lua

399. Evaluate Division

2017-03-05 19:27 316 查看
挺麻烦的,graph+dfs。归根结底还是在图中找路的问题。

class Solution {
public:

//start value:sum=1;visit[start]=1;
bool findVal(int start,int end,vector<int>& visit,double& sum,vector<vector<double>>& result)
{
visit[start]=1;
if(result[start][end]!=-1)
{
sum*=result[start][end];
return true;
}
else
{
for(int i=0;i<result.size();i++)
{
if(visit[i]==0&&result[start][i]!=-1)
{
sum*=result[start][i];
if(findVal(i,end,visit,sum,result))
return true;
else
sum/=result[start][i];
}
}
return false;
}

}

vector<double> calcEquation(vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, string>> queries) {
map<string,int> func;
int index=0;
for(int i=0;i<equations.size();i++)
{
if(func.count(equations[i].first)==0)
{
func[equations[i].first]=index;
index++;
}

if(func.count(equations[i].second)==0)
{
func[equations[i].second]=index;
index++;
}
}

vector<vector<double>> result;
vector<double> temp(index,-1.0);
for(int i=0;i<index;i++)
result.push_back(temp);
for(int i=0;i<index;i++)
result[i][i]=1.0;

for(int i=0;i<equations.size();i++)
{
int a=func[equations[i].first];
int b=func[equations[i].second];
result[a][b]=values[i];
result[b][a]=1/values[i];
}

vector<double> res;

for(int i=0;i<queries.size();i++)
{
if(func.count(queries[i].first)>0&&func.count(queries[i].second)>0)
{
int start=func[queries[i].first];
int end=func[queries[i].second];
double sum=1.0;
vector<int> visit(index,0);
if(findVal(start,end,visit,sum,result))
res.push_back(sum);
else
res.push_back(-1);
}
else
res.push_back(-1);
}
return res;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: