Witam mam nadzieję, że ktoś znajdzie błąd nad którym ja już siedzę dłuższą chwilę i nie mogę sobie poradzić. Mianowicie mam do napisania algorytm Dijkstry tylko, że graf buduję na zasadzie pobranej mapy z portalu, ale mniejsza o to. Mam vector wierzchołków. Struktura wierzchołka to jego id, długość i szerokość geograficzna. Jednak prowadzący zażyczył sobie aby Dijkstra nie wypisywała drogi po id wierzchołków tylko po ich nazwie. Ok i tutaj następuję problem:
Kod: Zaznacz cały
void getnodesname(vector < Node > &n, vector < Way > w)
{
for(int i = 0; i < w.size(); i++) //dopóki mamy jakieś drogi
{
for(int j = 0; j < w[i].nodes.size(); j++) //dopóki droga posiada zbiór wierzchołków
{
for(int k = 0; k < n.size(); k++) //dopóki mamy jakiś wierzchołek
{
if(n[k].nid == w[i].nodes[j]) //jeśli id wierzchołka jest takie samo jak id wierzchołka, który zawiera
//sprawdzana droga
{
n[k].name = w[i].name; //to polu name w wierzchołku przypisujemy nazwę drogi
}
}
}
}
}
Tak wiem wiem złożonością się tu nie popisałem jednak chodzi mi o to, że do funkcji jako argument przekazuję vector wierzchołków n, który jest już uzupełniony wartościami takimi jak id, szer i dł geogr. Teraz jednak dopiero mogę przypisać im nazwę i myślałem, że jeśli przekaże vector n jako referencję to zmiany zostaną zachowane jednak po wyjściu z funkcji ten vector jakos dziwnie wygląda. Niektóre wierzchołki dostały nazwę, ale są też takie, które tej nazwy nie mają. Dla przykładu sprawdzałem w funkcji czy są wierzchołki o nazwie "Szkotnik" i takowe są, jednak po wyjściu z funkcji kiedy sprawdzam to samo w mainie to takich wierzchołków już niestety nie ma. Gdzie popełniam błąd?
Ostatnio zmieniony 21 cze 2011, o 11:23 przez
Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.