Advertisement
Guest User

Untitled

a guest
Mar 24th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. typedef char root;
  7.  
  8. class way{
  9. public:
  10.     root start;
  11.     root end;
  12.     double weight;
  13.     bool correct;
  14.  
  15.     friend ostream& operator<<(ostream & out, const way & obj){
  16.         out << obj.start << "->" << obj.end << " " << obj.weight;
  17.     }
  18.     friend istream& operator>>(istream & in, way & obj){
  19.         in >> obj.start >> obj.end >> obj.weight;
  20.     }
  21.  
  22.     way(): weight(0), correct(true){}
  23.     way(root start, root end, double weight): start(start), end(end), weight(weight), correct(true){}
  24.  
  25. };
  26.  
  27. vector<root> task(vector<way> ways, char start, char end, vector<root> &correctway ,int k = 0) {
  28.     way min;
  29.  
  30.     for (int i = 0; i < ways.size(); i++)
  31.         if ((ways[i].start == start) && (ways[i].correct)) {min = ways[i]; k = i; break;}
  32.  
  33.     for (int i = 0; i < ways.size(); i++)
  34.         if ((ways[i].weight < min.weight) && (ways[i].start == start) && (ways[i].correct)) {min = ways[i]; k = i;}
  35.  
  36.     correctway.push_back(min.start);
  37.     if (min.weight == 0) {ways[k].correct = false; correctway.pop_back(); task(ways, ways[k].start, end, correctway, k);}
  38.  
  39.     else if (min.end != end) {task(ways, min.end, end, correctway, k);}
  40.     return correctway;
  41.  
  42. }
  43.  
  44. int main(){
  45.     root start, end;
  46.     cin >> start >> end;
  47.     vector<root> correctway;
  48.     vector<way> ways;
  49.     way temp;
  50.     string result = "";
  51.     int i = 0;
  52.     char b = start;
  53.     char a; double c;
  54.     while (b != end){
  55.         cin >> a >> b >> c;
  56.         way temp(a,b,c);
  57.         ways.push_back(temp);
  58.     }
  59.  
  60.  
  61.     correctway = task(ways, start, end, correctway);
  62.     correctway.push_back(end);
  63.     for (int i = 0; i < correctway.size(); i++)
  64.     {
  65.         cout << correctway[i];
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement