我正在编写一个函数,该函数将能够找到两个位置之间的路径。我相信该函数可以找到路径,因为它在找到目标位置时将返回true,我的问题是,当我将目标位置推到矢量上并将其打印到我的外文件时,它并没有推动我需要的位置,尽管当我将其打印到控制台时,它会打印出我希望打印的内容。
我尝试编写多行代码以将同一变量压入向量,并且每次将不同的位置压入向量时,尽管每当我将其打印到控制台时,它仍会打印出我期望的图像。我也尝试过简单地将所需的确切数据推送到向量上,但仍然无法将其打印到我期望的文件外。
bool findShortestPath(vector<int> & visitedNodes, vector<int> & shortestPath, int & startNode, int & endNode, string mode)
{
visitedNodes.push_back(startNode);
shortestPath.push_back(startNode);
vector<int> neighbours;
Link thisLink(0, 0, "");
neighbours = findNeighbours(startNode);
if (startNode == endNode)
{
cout << startNode << endl;
shortestPath.push_back(startNode);
cout << "hello" << endl << endl;
return true;
}
else
{
for (int neighbour : neighbours)
{
for (Link link : links)
{
if (link.getRef1() == startNode && link.getRef2() == neighbour)
{
thisLink = link;
break;
}
else if (link.getRef2() == startNode && link.getRef1() == neighbour)
{
thisLink = link;
break;
}
}
if (std::find(visitedNodes.begin(), visitedNodes.end(), neighbour) == visitedNodes.end() || visitedNodes.empty())
{
if (thisLink.checkMode(mode))
{
findShortestPath(visitedNodes, shortestPath, neighbour, endNode, mode);
}
}
}
shortestPath.pop_back();
cout << "Bye" << endl;
return false;
}
}
该函数称为...
else if (command == "FindRoute")
{
vector<int> path;
stringstream stream(commandString);
string splitString;
string output;
string mode;
int startNode;
int endNode;
int i = 0;
while (getline(stream, splitString, ' '))
{
if (i == 1)
{
mode = splitString;
}
else if (i == 2)
{
stringstream startNodeString(splitString);
startNodeString >> startNode;
}
else if (i == 3)
{
stringstream endNodeString(splitString);
endNodeString >> endNode;
}
i++;
}
vector<int> visitedNodes;
findShortestPath(visitedNodes, path, startNode, endNode, mode);
for (int node : path)
{
_outFile << node << endl;
}
return true;
}
我已经逐步完成了代码,并且将startNode推送到shortestPath时,它正是我所期望的。 因此输入为“ FindRoute Rail 9081958 15832241”,因此它正在寻找位置9081958和15832241之间的路线。当我使用cout << node << endl;它带有90819589361783。与写入文件相同。