Я пишу функцию, которая возвращает путь между двумя узлами в минимальном остовном дереве, созданном с использованием алгоритма Крускала
map<string, set<string>> mst = { "A" : ["B"]
"B" : ["A", "C", "D"]
"C" : ["B"]
"D" : ["B", "E"]
"E" : ["D"] }
Алгоритм поиска пути выглядит следующим образом:
vector<string> findPath(map<string, set<string>> mst, string src, string dest, vector<string> path) {
if(src == dest) {
cout << "Function path size: " << path.size() << endl;
return path;
}
set<string> possible = mst[src];
for(vector<string>::iterator it = path.begin(); it != path.end(); it++) {
if(possible.find(*it) != possible.end())
possible.erase(*it);
}
for(set<string>::iterator it = possible.begin(); it != possible.end(); it++) {
vector<string> a = path;
if(find(a.begin(), a.end(), src) == a.end())
a.push_back(src);
vector<string> p = findPath(mst, *it, dest, a);
if(p[0] != "randValue") {
return path;
}
}
vector<string> p = path;
p[0] = "randValue";
return p;
}
Если я вызываю функцию:
vector<string> path;
path = findPath(mst, "A", "C", path);
cout << "Main path size: " << path.size() << endl;
Вывод:
Function path size: 2
Main path size: 0
Почему функция не возвращает заполненный путь?