Mam pytanie.. pisze programik na grafach. chciałbym to raczej zrobić tak, że wczytuje w pętli a i b tak jak tutaj, ale później robię pętle dla pocz += 1; i wielokrotnie wykonuje funkcje w_glab na tym samym niezmienionym wskazniku. Nie wiem jak to zrobić.. jakieś kopie tych wskaźników czy przechowywać jakoś a i b ale jak się poźniej do tego odnieść, a może jakoś do funkcji wysłać ten wskaźnik, ale jak później niby zrobie rekurencje.. :)
Ogólnie to później wypisuje połączenia względem początku(zmienna pocz) czyli od którego wierzchołka ma przeszukiwać graf(DFS). Chciałbym dla różnych wierzcholków zacząć przeszukiwanie grafu. Niekoniecznie zmieniać zmienną pocz w kodzie tylko wykonwać pętlę względem n(czyli liczbie wierzchołków).
czyli:
for(int i = 1; i<n+1; i++) {
pocz += 1;
w_glab(pocz);
}
Lecz nie mogę tak zrobić ponieważ za pierwszym obiegiem wartości na które wskazuje wskaźnik są zmienione ;/
cały kod:
//www.algorytm.edu.pl
#include<iostream>
#include<vector>
using namespace std;
struct wierzcholki{
//połączenia wychodzące z danego wierzchołka
vector <unsigned int> polaczenia;
//okresla, czy wierzchołek został odwiedzony
bool odwiedzony;
//dodatkowe dane dla danego wierzchołka
//........................
//........................
}*w;
void w_glab(int k)
{
cout<<"Odwiedzono "<<k<<" wierzcholek\n";
w[k].odwiedzony = 1;
for(int i=0; i<w[k].polaczenia.size(); i++)
//jesli wierzchołek, do którego chcemy przejsć nie został
//jeszcze odwiedzony
if(!w[w[k].polaczenia[i]].odwiedzony)
//to przechodzimy do niego
w_glab(w[k].polaczenia[i]);
}
int main()
{
unsigned int n, pol, pocz, a, b;
cout<<"Podaj liczbę wierzcholków w grafie: ";
cin>>n;
cout<<"Podaj liczbę połączeń w grafie: ";
cin>>pol;
cout<<"Podaj wierzchołek, z którego zaczynamy przeszukiwanie: ";
cin>>pocz;
w = new wierzcholki[n+1];
cout<<"Podaj kolejne połączenia wierzchołków: \n";
//wczytanie połączeń grafu
for(int i=0; i<pol; i++)
{
cin>>a>>b;
cout<<a<<" <--> "<<b<<endl;
//tworzymy połączenie a --> b
w[a].polaczenia.push_back(b);
//tworzymy połączenie b --> a
w[b].polaczenia.push_back(a);
}
cout<<"\nOdwiedzano wierzchołki w następującej kolejnosci:\n";
w_glab(pocz);
delete [] w;
cin.ignore();
cin.get();
return 0;
}