我必须读取一个文件才能创建加权图。必须使用文件中的输入找到最短路径。文件的结构将为第一行= numVertices,下面的每一行具有3个数字,分别为:0 1 2其中0是边的起点,1是边的终点,2是权重。我在创建图形时尝试实现邻接矩阵,但是没有运气。任何建议将不胜感激。
尝试重新构造我读取文件的方式,还尝试调整findShortestPath函数。
void createGraph(string file_name) //Function to create a graph based on a file, whose name is file_name.
{
ifstream f(file_name);
if (f.fail())
{
return;
}
string line;
getline(f, line);
int num = stoi(line);
numVertices = num;
int data[50][50];
string line2;
int num1 = 0, num2 = 0, num3 = 0;
while (!f.eof())
{
f >> num1;
f >> num2;
f >> line2;
num3 = stoi(line2);
data[num1][num2] = num3;
}
}
//////////////////shortest path function
string findShortestPath(int start, int end)
{
int data[numVertices][numVertices];
int dist[numVertices];
bool sptSet[numVertices];
int parent[numVertices];
for (int i = 0; i < numVertices; i++)
{
parent[0] = -1;
dist[i] = INT_MAX;
sptSet[i] = false;
}
dist[start] = 0;
for (int count = 0; count < numVertices - 1; count++)
{
int u = minDistance(dist, sptSet);
sptSet[u] = true;
if (sptSet[u] == end)
break;
for (int v = 0; v < numVertices; v++)
if (!sptSet[v] && data[u][v] && dist[u] + data[u][v] < dist[v])
{
parent[numVertices] = end;
dist[v] = dist[u] + data[u][v];
}
}
printSolution(parent);
输出未输出最短路径,而是输出随机数。
答案 0 :(得分:0)
在findShortestPath
函数中,data[numVertices][numVertices]
与data
函数中的createGraph
变量不同。
查看此https://www.geeksforgeeks.org/scope-of-variables-in-c/或尝试查找有关变量范围的其他来源。
答案 1 :(得分:0)
在函数findShortestPath
中,您声明了一个名为data
的本地数组,该数组应存储邻接矩阵数据。但是,您从未将任何数据写入其中!考虑将矩阵作为函数参数传递。您的函数签名应如下所示:
findShortestPath(int** data, int numVertices, int start, int end)
此外,请避免使用VLA,因为它不是标准的一部分。考虑使用new
在堆上创建一个二维数组。 (并且不要忘记在完成后执行delete[]
!)
或者,如果您不想手动管理阵列的生命周期,则可以使用std::vector<std::vector<int>>
。