Reprezentacja grafu jako listy sąsiedztwa cpp, prośba o pomoc z dokończeniem programu.

0

Hej, jestem absolutnie zielona, a mam na uczelnię napisać program, który wyświetla reprezentację grafu w postaci listy sąsiedztwa oraz implementuje metody:
first (v: int): int – zwraca indeks pierwszego sąsiada v
next (v: int; i: int): int – zwraca indeks następnego po i-tym sąsiada v
vertex (v: int; i: int): wsk – zwraca wskaźnik do sąsiada v o indeksie i
dla podanego na wejściu wierzchołka mam zademonstrować działanie tych metod.

no i rpoblem mam durny. bo implementowaliśmy te funkcje na tablicy zajęciach i je przepisałam, ale teraz nie wiem, jak zademonstrować ich działanie (wiem, jestem totalnym noobem).

Oto implementacja z zajęć:

 
	// funkcja zwracajaca wartosc pierwszego sasiada wierzcholka 'v'
	int first( int v ) {
		if( v >= ncount ) {//indeks poza zakresem
			return -1;
		} else { 
			if( lista[v]->head != NULL ) {//jesli lista pusta to zwroc -1
			
				return lista[v]->head->data;
		    	} else {
                 		   		return -1; // w p.p. zwroc wartosc
                			}
		}
}
		
	//funkcja zwracajaca wartosc nastepnego po n-tym sasiada wierzcholka 'v'
	int next( int v, int n ) {
		if( v >= ncount ) {//indeks poza zakresem
			return -1;
		} else {
			Node* tmp = lista[v]->head;
			while( tmp != NULL && n > 0 ) {
				tmp = tmp->next;
				--n;
			}
			if( tmp != NULL )//jesli istnieje taki sasiad to wyswietlamy jego indeks
				return tmp->data;
			return -1; //jezeli nie istnieje to -1
		}	
	}
		
	//funkcja zwracajaca wskaznik do sasiada wierzcholka 'v' o wartosci 'n'
	Node* vertex( int v, int n ) {
		if( v >= ncount ) {//jesli indeks poza zakresem zwroc null
			return NULL;



		} else {
			Node* tmp = lista[v]->head;

			while( tmp ) {
				if( tmp->data == n )//jesli jest taki sasiad to zwracamy wskaznik 
					return tmp;
				tmp = tmp->next;
			}
			return NULL; //jesli nie ma to null
		}
	}
		

No i teraz nie wiem, co ma być w funkcji main. Bardzo proszę o pomoc!

0

Ok. wynik działania funkcji x wyświetlam tak:

	cout << "Podaj wybrany wierzcholek grafu:" << endl;
        cin >> x;
        cout << "Oto jego pierwszy sasiad:" <<endl;
        cout <<g->first(x);
 

i działa.

cała funkcja main:

 int main() {
    int number, k;
    int v, x, y;
    cout << "Podaj ilosc wierzcholkow dla grafu" << endl;
    cin >> number;
    Graph* g = new Graph( number );
    cout << "Podaj ilosc krawedzi" << endl;
    cin >> k;
    for( int i = 0; i < k; ++i ) {
    	cout << "Podaj pare wierzcholkow polaczonych krawedzia (wiercholki numerowane sa od 0)" << endl;
         	cin >> x >> y;
         	g->addEdge(x,y);
    }
    
    	cout << "Oto Twoj graf w reprezentacji listy sasiedztwa:" << endl;
    g->printAll();
    
    	cout << "Podaj wybrany wierzcholek grafu:" << endl;
        cin >> x;
        cout << "Oto jego pierwszy sasiad:" <<endl;
        cout <<g->first(x);

funkcje addEdge() i printAll() są zaimplementowane i wszystko działa.

jak teraz dobrać się do funkcji next oraz funkcji vertex i wypisać ich wyniki w konsoli?
bardzo proszę o pomoc.

0

ok, przepraszam za zaśmiecanie forum głupimi pytaniami. poradziłam sobie.

0
int pierwszySasiad = g->first(x); // lub g->next(x, 0);
int drugiSasiad = g->next(x, 1);
int trzeciSadiad = g->next(x, 2);

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