Я работал над этой проблемой в течение 3 дней, и я в тупике. Мы должны реализовать алгоритм Прима, используя 2 карты (строка, вершина (класс) и строка, вектор). Первый хранит букву как имя, а также пи и ключ в классе вершин. На 2-й карте хранятся буквенное имя вершины и вектор всех ее соседей. Я получаю ошибки компиляции, и это из-за проблем с доступом к элементам вектора на карте. В любом случае, вот мой код. (n.weight, которое я знаю, неверно, потому что это итератор, но мне нужен соседний класс в этом месте в векторе, чтобы получить доступ к переменной веса)
void Graph::mst(string start){
string u;
if(vertices.find(start) != vertices.end()){
for (std::map<string,Vertex>::iterator it=vertices.begin(); it!=vertices.end(); ++it){
it->second.key = 100;
it->second.pi = "NIL";
}
vertices[start].key = 0;
for (std::map<string,Vertex>::iterator it=vertices.begin(); it!=vertices.end(); ++it){
minQ.insert(it->first, it->second.key);
}
u = minQ.extractMin();
while(u != "empty"){
cout << u << " " << vertices[u].pi << " " << vertices[u].key <<endl;
for (std::vector<Neighbor>::iterator v = adjList.find(u)->second.begin();
v!=adjList.find(u)->second.end(); ++v){
if(minQ.isMember(v->name) && vertices[u].key < (problem here)){}
}
}
u = minQ.extractMin();
}
}
Задача ещё не решена.
Других решений пока нет …