Я сгенерировал этот код для проверки случайного неориентированного графа 100 раз и случайного генерирования узлов и весов графа. Моя проблема в том, что когда я пытаюсь сохранить кратчайший путь, вызывая минимальное расстояние, что-то идет не так, и когда я возвращаю размер моего списка, он всегда равен 1. Что не так?
// Random Graph Generator
for (int n = 1; n <= 101; ++n)
{
int r = 0;
nodeCount = 10; //rand() % 8128 + 64;
while (r <= nodeCount)
{
++r;
int nodeNumb = (rand() % 6); // Generates a possible node from 0 to 6 (seven possiblities)
int nodeDest = (rand() % 6); // Generates a possible node destination the same as above
int node_weight = rand() % 100 + 1; // Generate random weight of node from 1 to 101
// Create adjacency list
adjacency_list[nodeNumb].push_back(neighbourer(nodeDest, node_weight));
// For undirected graph create opposite connection back
adjacency_list[nodeDest].push_back(neighbourer(nodeNumb, node_weight));
}
vector<weight_w> min_distance; // declare vector for minimum distance
vector<vertex_v> previous; // declare vector to hold previos
int origin = 3; // origin to be inputted
int destination = 5; // destination to be inputted
list<double> pathCount;
DijkstraComputePaths(origin, adjacency_list, min_distance, previous);
pathCount.push_back(min_distance[destination]);
for (int deleteIterator = 0; deleteIterator <= 6; ++deleteIterator)
{
adjacency_list[deleteIterator].clear();
}
cout << "The List Size is: " << pathCount.size() << endl;
}
Причина, по которой у вас всегда есть только 1 элемент в списке, заключается в том, что у вас есть list<double> pathCount;
внутри тела вашего внешнего для петли.
Это означает, что на каждой итерации вы уничтожаете свой старый список и создаете новый, добавляя к нему только одно значение.
Вместо этого перенесите определение pathCount
вне для цикла. Таким образом, он будет иметь большую область, чем цикл for.
конечно, я не могу гарантировать правильность вашей программы после этого исправления, потому что определения для neighbourer()
vertex_v
, weight_w
а также DisjkstraComputePaths
не хватает.
Других решений пока нет …