Błędnie działająca pętla for z iteratorem (pair)
Ostatnio zmodyfikowano 2015-04-07 20:57
Sztywny Temat założony przez niniejszego użytkownika |
Błędnie działająca pętla for z iteratorem (pair) » 2015-04-03 22:25:15 Witam, Zanim opiszę swój problem to wkleję kod źródłowy mojego programu:
#include <iostream> #include <list> #include <queue> #include <vector> #include <utility>
using namespace std;
struct vertex { int kolor; int odleglosc; int rodzic; };
typedef struct pair < int, int > para;
int main() { cout << "Ile wierzcholkow w grafie? "; int rozmiar; cin >> rozmiar; vertex wierzcholek[ rozmiar + 1 ]; list < para > graph[ rozmiar + 1 ]; queue < int > kolejka; cout << "Ile krawędzi: "; int m; cin >> m; for( int i = 1; i <= m; i++ ) { int v1, v2, weight; cin >> v1 >> v2 >> weight; para pair1 = make_pair( v2, weight ); graph[ v1 ].push_back( pair1 ); } cout << endl << "Podaj zrodlowy wierzcholek: "; int root; cin >> root; for( int i = 1; i <= rozmiar; i++ ) { wierzcholek[ i ].kolor = 0; wierzcholek[ i ].odleglosc = 0; wierzcholek[ i ].rodzic = 0; } wierzcholek[ root ].kolor = 1; wierzcholek[ root ].odleglosc = 0; wierzcholek[ root ].rodzic = 0; kolejka.push( root ); int obecny; while( kolejka.empty() == false ) { obecny = kolejka.front(); kolejka.pop(); for( list < para >::iterator j = graph[ obecny ].begin(); j != graph[ obecny ].end(); j++ ) { if( wierzcholek[ j->first ].kolor == 0 ) { wierzcholek[ j->first ].kolor = 1; wierzcholek[ j->first ].odleglosc = wierzcholek[ obecny ].odleglosc + 1; wierzcholek[ j->first ].rodzic = obecny; kolejka.push( j->first ); } wierzcholek[ obecny ].kolor = 2; } } cout << endl << endl; for( int i = 1; i <= rozmiar; i++ ) cout << i << ": " << wierzcholek[ i ].odleglosc << endl; return 0; }
Wkleiłem cały kod ponieważ uważam, że aby zrozumieć co mam na myśli należy zerknąć na kod całego programu. Mój problem dotyczy sekcji "przeszukiwanie wszerz" a dokładniej pętli ze zmienną j. Pętla zachowuje się tak jakby odwoływała się do licznika pary w której mamy dwa elementy, co jest oczywiście błędem. Taki sam problem miałem w sekcji wyświetlanie sąsiadów. W rozwiązaniu problemu pomogły pętle poprzedzające pętle z iteratorem. W taki sam sposób chciałem rozwiązać problem w "przeszukiwaniu" (stosując pętlę ze zmienną k) lecz nic to nie dało. Wracając do problemu. Chcę aby pętla z iteratorem j (w sekcji przeszukiwanie wszerz) liczyła ilość elementów listy, bo w tym momencie liczy ilość elementów w pair. Proszę powiedzieć co robię źle i w jaki sposób można by rozwiązać ten problem. Mam nadzieję, że wszystko jasno opisałem. Pozdrawiam i czekam na odpowiedź. |
|
Sztywny Temat założony przez niniejszego użytkownika |
» 2015-04-07 20:57:09 Odświeżam |
|
« 1 » |