Reprezentacja grafów a algorytmy MST

0

Witam,

mam problem z reprezentacją grafu w postaci macierzy i listy. Generalnie jeśli chodzi o macierz to wydaje mi się, że trzeba zdefiniować dwuwymiarową tablicę i w poszczególnych komórkach przechowywać wagi krawędzi. Dla uproszczenia przyjmuję, że graf jest nieskierowany z wagami większymi od zera. Jeśli np. jakieś wierzchołki nie mają łączącej krawędzi to można wpisać jako wagę -1. Jeśli chodzi o listę to jeszcze się tym nie zająłem. Prowadzący wymaga, żeby utworzyć klasę "Graf" i w programie ma zostać użyty polimorfizm. Problem w tym, że nie wiem, które klasy powinny się dziedziczyć. Czy lepiej jeśli klasa Graf będzie dziedziczyć z klasy Macierz i Lista, czy raczej nie jest to dobry pomysł??

Kolejny problem to implementacja algorytmu Kruskala na minimalne drzewo rozpinające. Jeśli przechowujemy wagi w tablicy dwuwymiarowej to jak ją posortować np. algorytmem Qsort. Bo oprócz posortowania wartości potrzebne będą wierzchołki do których krawędź należy.

Z góry dzięki za odpowiedź

0

@macierz - ok, moze byc
@lista - "lista" odnosi sie do informacji o sasiadach wierzcholka. dla kazdego wierzcholka trzymasz liste par {mojsasiad, wagakrawedzidoniego}

klasa, np.:
Graf - wspolny inteterfejs i definicja podstawowych rzeczy, jak np. metod bool czySasiaduja(wierzcholek a, wierzcholek b)
Graf_lista : Graf - implementacja grafu uzywajaca listy
Graf_macierz : Graf - jak wyzej, macierzy
i teraz mozesz np. porownac wydajnosc algorytmu X opartego na metodach klasy Graf przy uzyciu konkretnych implementacji uzywajacych listy/macierzy

kruskal/sortowanie:
pomysl dluzej nad definicja "wartość"i. nikt nie nakazuje ze wartosc sortowana musi byc liczba. wartosciami sortowanymi moga byc przeciez np. cale wiersze. musisz opracowac tylko inna funkcje porownujaca 'wartosci' i w lekko inny sposob wywolac qsort [w sensie, podac mu parametry zgodnie z nowym znaczeniem..]

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