Eine der gängigsten Methoden zur Darstellung von Graphen ist die Verwendung von Adjazenzlisten. Eine Adjazenzliste stellt den Graphen als Array von Listen dar. Jedes Element des Arrays repräsentiert dabei einen Knoten im Graphen, und die mit diesem Knoten verknüpfte Liste enthält die Knoten, die zu ihm benachbart sind.
Gegeben ist der gerichtete Graph im Bild. Daraus ergibt sich folgende Adjazenzliste:
Gerichteter Graph mit 8 Kanten und 10 Kanten. Beachte, dass die Knoten 5 und 8 wechselseitig verbunden sind.
Wie man sieht, ist die Darstellung des Graphen mithilfe einer Adjazenzliste deutlich kompakter als mithilfe einer Adjazenzmatrix. Das liegt daran, dass unser Graph nicht besonders viele Kanten aufweist. In manchen Fällen, wenn die Anzahl an Kanten sehr groß ist, kann es jedoch sinnvoller sein, den Graphen in einer Adjazenzmatrix zu speichern.
Herausforderung: Kanten zu Adjazenzliste
Gegeben ist ein ungerichteter Graph mit v Knoten und e Kanten. Deine Aufgabe ist es, die zugehörige Adjazenzliste zu erstellen.
Eingabe
In der ersten Zeile der Eingabe stehen zwei ganze Zahlen v (1 ≤ v ≤ 100 000) und e (1 ≤ e ≤ 100 000).
In den folgenden e Zeilen stehen jeweils zwei ganze Zahlen v1, v2 (1 ≤ v1, v2 ≤ v), die bedeuten, dass der Knoten v1 mit dem Knoten v2 und umgekehrt verbunden ist.
Ausgabe
Das Programm soll die Adjazenzliste des gegebenen Graphen ausgeben. Jede Zeile soll mit der Kennung eines Knotens gefolgt von einem Semikolon (:) beginnen und danach dessen Nachbarn enthalten. Die Nachbarn in jeder Zeile sollen getrennt durch ein Leerzeichen ausgegeben werden. Die Reihenfolge sowohl der Knoten als auch der jeweiligen Nachbarn darf beliebig sein.