Evaluate Division(C++除法求值)

清疚 2022-09-08 03:40 87阅读 0赞

(1) bfs

  1. class Solution {
  2. public:
  3. vector<double> calcEquation(vector<vector<string>>& e, vector<double>& v, vector<vector<string>>& q) {
  4. unordered_map<string,int> mp;
  5. int number=0;
  6. for(int i=0;i<e.size();i++) {
  7. if(mp.find(e[i][0])==mp.end()) {
  8. mp[e[i][0]]=number;
  9. number++;
  10. }
  11. if(mp.find(e[i][1])==mp.end()) {
  12. mp[e[i][1]]=number;
  13. number++;
  14. }
  15. }
  16. vector<vector<pair<int,double>>> edge(number);
  17. for(int i=0;i<e.size();i++) {
  18. edge[mp[e[i][0]]].push_back({mp[e[i][1]],v[i]});
  19. edge[mp[e[i][1]]].push_back({mp[e[i][0]],1/v[i]});
  20. }
  21. vector<double> result;
  22. for(int i=0;i<q.size();i++) {
  23. double temp=-1.0;
  24. if(mp.find(q[i][0])!=mp.end() && mp.find(q[i][1])!=mp.end()) {
  25. int a=mp[q[i][0]];
  26. int b=mp[q[i][1]];
  27. if(a==b) {
  28. temp=1.0;
  29. result.push_back(temp);
  30. continue;
  31. }
  32. queue<int> qe;
  33. vector<double> d(number,-1.0);
  34. d[a]=1.0;
  35. qe.push(a);
  36. while(!qe.empty() && d[b]<0) {
  37. int t=qe.front();
  38. qe.pop();
  39. for(int i=0;i<edge[t].size();i++) {
  40. if(d[edge[t][i].first]<0) {
  41. d[edge[t][i].first]=edge[t][i].second*d[t];
  42. qe.push(edge[t][i].first);
  43. }
  44. }
  45. }
  46. temp=d[b];
  47. }
  48. result.push_back(temp);
  49. }
  50. return result;
  51. }
  52. };

发表评论

表情:
评论列表 (有 0 条评论,87人围观)

还没有评论,来说两句吧...

相关阅读

    相关 除法约数

    试除法求约数 给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个