Problem z vectorem/referencją...

0
 
class zadanie {
public:
int id;
int waga;
int czas;
vector <zadanie> nast;
vector <zadanie> poprz;

};

int greedy(zadanie &task) {

zadanie next;
if(byl[task.id] == 0) {
byl[task.id] = 1;
wynik += funkcja_celu(moment, task);
moment += task.czas;

sort(moment, task); //sortowanie

for(int i=0; i<task.nast.size(); i++) {

next = task.nast[i];

greedy(next);

}
}
else {
cout << "w else i ma poprzednika" << endl;
return 0;
}
}

Mam pewien problem... Chodzi o to że mam graf, w którym kolejność przykładowa jest następująca 0->1->9, 0 ma jeszcze następnik 2 i 3... No i po wywołaniu funkcji wchodzi do obiektu 0, potem do 1 i powinien iść do 9, a on to olewa i idzie od razu do kolejnego następnika 0, czyli 2... Dodatkowo dowiedziałem się po wielu hard debugach, że po wejściu do 0 przy sprawdzeniu rozmiaru vectora następników dla elementu 1 daje mi 0 (mimo iż element 1 ma następnik...) Podejrzewam, że związane może to być z rekurencyjnym wywołaniem funkcji i utworzeniem się automatycznego obiektu (chociaż nie mam pojęcia why...)

0

W zamieszczony fragmencie nie znalazłem widocznych błędów.
Jasnym jest że nie został zamieszczony cały kod klasy 'zadanie'.
Jedynym potencjalnym niebezpieczeństwem w podanym kodzie jest (prawdopodobnie nieświadome) utworzenie nowego obiektu zadanie ('zadanie next') na początku funkcji 'int greedy(zadanie &task)', może prowadzić to do błędów jeżeli konstruktor domyślny klasy dokonuje jakichś skomplikowanych operacji.

0

Najpierw zrzędzenie: FORMATUJ KOD.
Co do problemu, za bardzo wyciąłeś kod z kontekstu i w zasadzie nie wiadomo co to robi i jakie są twoje intencje.
Nie wiadomo co robi sort (na pewno nie jest to std::sort), może powoduje jakieś modyfikacje task.
Możliwe, że robisz modyfikację nast co powoduje, że twoja referencja przestaje być ważna.
Swoją dziwne jest robienia drzewa przez vector z wartościami a nie ze wskaźnikami, zwłaszcza, gdy widzę nast i poprz. Gdybyś miał tylko nast byłoby to do przyjęcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1