W jaki sposób mogę zaimplementować macierzową reprezentację grafu, którego węzły są etykietowane wartościami typu string? Gdyby były inty to nie miałbym żadnego problemu bo wtedy a[i][j]=x oznaczałoby, że mamy krawędź z wierzchołka i do wierzchołka j o wadze x. Ale jak to zrobić ze stringami?
Najprościej chyba trzymać normalną macierz, tylko po prostu dodać dodatkową tablicę/set w którym trzymasz powiązania etykieta->jej indeks w macierzy.
Czyli żeby znaleźć odległość od "jabłko" do "kamień", sprawdzasz jaki mają indeks (A=GetIndex("Jabłko"), B=GetIndex("kamień")) i sprawdzasz odległość normalnie (odl=Macierz[A][B]).
Chyba jeszcze tego nie widzę.
Mam zrobić klasę z potem etykieta typu string i polem indeks typu int?
Utwórz słownik, w którym kluczem jest nazwa węzła w grafie, a wartością indeks w macierzy.
Nie mam pojęcia jak to wszystko zaimplementować.
Nie możesz zrobić tak jak napisałeś w pierwszym poście, z tą różnicą, że typ będzie string?
int n; - liczba wierzchołków
string[n][n] krawdzie;
krawedzie[0][1] = "jajco";
Jeśli krawdzedzie[x][y] == null, to nie są połączone.
No nie, bo to oznaczać będzie, że waga krawędzi jest równa "jajco" podczas gdy "jajco" powinno być wartością węzła...
A zrób dwie macierze, w jednej trzymaj wagę a w drugiej te stringi.
Ok, idee rozumiem. Największy problem polega na tym, że w klasie, która będzie implementowała Graf muszę zawrzeć nastepujące pola:
ilość wierzchołków, ilość krawędzi - łatwe,
macierz sąsiedztwa - czy ma to być dwuwymiarowa tablica rozmiaru ilosc wierzchołków x ilość wierzchołków ?
lista z etykietami - jednowymiarowa tablica?
Podczas pisania programów w c# starałem się omijać mechanizm tablic jak najszerszym łukiem - uważam, że skoro język ten jest językiem wysokiego poziomu, który oferuje rzeczy typu List<T> to używanie tablic jest jakimś nieporozumieniem (rozumiem w czystym C, ale nie tutaj...). W zadaniu mam jednak nie korzystac ze standardowych bibliotek, zatem chyba nie mam wyboru.
Tylko jak ja to mam zrobić, skoro rozmiar tych obu tablic w zasadzie muszę znać na samym początku? Czy rozmiar tych tablic powinienem sobie sam zdefiniować na początku jako jakiś MAX? Da się potem te tablice jakoś powiększać?
Nie rozumiesz idei. Potrzebujesz przechowywać informacje o jednoznacznej zależności etykiet grafu z ich pozycjami w macierzy sąsiedztwa. Odnośnie Twojego pytania o rozmiary tablicy, nie musisz ich definiować na sztywno (chociaż to zależy od tego jaki interfejs upubliczniasz). Z tego co się orientuję nie możesz powiększyć tablicy "w miejscu", ale przecież możesz zawsze zbudować nową tablicę na bazie drugiej.