Implementierung eines angrenzens Liste graph-Darstellung
Ich habe gerade angefangen mit der Graphentheorie. Ich kann nicht herausfinden, wie man code angrenzens Liste mit verknüpften Listen. zum Beispiel, wenn ich in diesem Graphen (ungerichtete):
A--------B
| /|\
| / | \
| / | \
| / | \
| / | \
| / | \
| / | \
C E-------D
Wie code ich es? Ich weiß, wie es zu tun mit Nähe matrix, aber wie es code mit angrenzens Liste und verknüpfte Listen (c++)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eines angrenzens Liste ist nur ein Vektor/array von Listen. Jedes element im Diagramm ist ein element im array, und eine Kante Hinzugefügt wird, ist es angrenzens Liste. So sieht es etwas aus wie:
Ein -> {B, C}
B -> {A, C, D, E}
C -> {A, B}
D -> {B, E}
E -> {B, D}
Also beginnen wir mit etwas, das wie
std::vector<std::list<vertex>>
. Jedoch, können wir tun besser als dieses, weil verticies sind einzigartig, daher können wir nutzen einemap
. Außerdem, ein vertex kann nur erscheinen in einem edge-Liste einmal, damit wir es ändern zustd::map<vertex, std::set<vertex>>
.So, mit zu beginnen, so etwas wie:
map/set
Umsetzung wird wahrscheinlich schneller sein, aber für alle Grafiken, die nicht Recht groß, der Unterschied wird vermutlich minimal sein.undordered_map
, dann ja, Sie können es reduzieren auf O(|V| + |E|) (da amortisiert O(1) lookup).Eines angrenzens Liste wäre nur ein Satz von Objekten, die die Kanten des Graphen.
Einer verknüpften Liste, klingt nicht besonders praktisch; in der Regel würden Sie definieren eine Reihenfolge von Kanten und legen Sie Sie in einem
std::set
oderstd::map
.Gibt es viele Möglichkeiten, dies zu tun, ist es schwer etwas empfehlen, ohne zu wissen, was Sie beabsichtigen zu tun mit der Grafik.