Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- typedef char root;
- class way{
- public:
- root start;
- root end;
- double weight;
- bool correct;
- friend ostream& operator<<(ostream & out, const way & obj){
- out << obj.start << "->" << obj.end << " " << obj.weight;
- }
- friend istream& operator>>(istream & in, way & obj){
- in >> obj.start >> obj.end >> obj.weight;
- }
- way(): weight(0), correct(true){}
- way(root start, root end, double weight): start(start), end(end), weight(weight), correct(true){}
- };
- vector<root> task(vector<way> ways, char start, char end, vector<root> &correctway ,int k = 0) {
- way min;
- for (int i = 0; i < ways.size(); i++)
- if ((ways[i].start == start) && (ways[i].correct)) {min = ways[i]; k = i; break;}
- for (int i = 0; i < ways.size(); i++)
- if ((ways[i].weight < min.weight) && (ways[i].start == start) && (ways[i].correct)) {min = ways[i]; k = i;}
- correctway.push_back(min.start);
- if (min.weight == 0) {ways[k].correct = false; correctway.pop_back(); task(ways, ways[k].start, end, correctway, k);}
- else if (min.end != end) {task(ways, min.end, end, correctway, k);}
- return correctway;
- }
- int main(){
- root start, end;
- cin >> start >> end;
- vector<root> correctway;
- vector<way> ways;
- way temp;
- string result = "";
- int i = 0;
- char b = start;
- char a; double c;
- while (b != end){
- cin >> a >> b >> c;
- way temp(a,b,c);
- ways.push_back(temp);
- }
- correctway = task(ways, start, end, correctway);
- correctway.push_back(end);
- for (int i = 0; i < correctway.size(); i++)
- {
- cout << correctway[i];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement