[Python] Erstellen einer Adjazenzmatrix / Adjazenzliste [Graphentheorie]

Einführung

Bei der Wettbewerbsprogrammierung ist die Wand, die früher oder später trifft, die "Graphentheorie". Es handelt sich um ein Problem im Zusammenhang mit der (?) Graphentheorie, das mit der Suche nach Breitenpriorität und der Suche nach Tiefenpriorität beginnt und eine unendliche Ausdehnung aufweist. Diesmal wird jedoch in Python "Adjazenzmatrix" und "Adjazenzliste" erstellt Ich fasste zusammen. Es wird von Zeit zu Zeit aktualisiert ...

Benachbarte Matrix und Adjazenzliste

Betrachten Sie beispielsweise das folgende Diagramm. fig.png

Es gibt zwei Haupttypen von Diagrammdatenstrukturen auf einem Computer. Verwenden wir es je nach Situation richtig. Eine ist die "benachbarte Matrix", die die Form einer $ n \ times n $ -Matrix hat. Obwohl es viel Speicher benötigt, hat es den Vorteil, feststellen zu können, ob es in einer festgelegten Zeit eine bestimmte Kante gibt oder nicht.

adj_m.txt


[[0, 1, 1, 0, 1],
 [1, 0, 1, 1, 0],
 [1, 1, 0, 1, 1],
 [0, 0, 1, 1, 1],
 [1, 0, 1, 1, 0]]

Die andere ist die "benachbarte Liste". Obwohl weniger Speicher benötigt wird, hat es den Nachteil, dass im schlimmsten Fall $ O (V) $ benötigt wird, um festzustellen, ob eine bestimmte Kante vorhanden ist.

adj_l.txt


[[2, 3, 5], [1, 3, 4], [1, 2, 4, 5], [2, 3, 5], [1, 3, 4]]

Das eigentliche Problem besteht darin, dass Sie zwei Endpunkte der Seiten erhalten, z. B. AtCoder Beginners Contest 168 D .. (Double Dots). Es gibt viele.

Wenn ich versuche, die Eingabe für dieses Diagramm auszudrücken, sieht es wie folgt aus. (Die Anzahl der Eckpunkte n und die Anzahl der Seiten m werden in die erste Zeile eingegeben.)

input.txt


5 8
1 2
1 3
1 5
2 3
2 4
3 4
3 5
4 5

Code

Ich werde einen Spickzettel schreiben, der diese in Adjazenzmatrizen und Adjazenzlisten umwandelt.

Eingabe in benachbarte Matrix

Wenn es kein Gewicht gibt

input_to_adj_m.py


n, m = map(int, input().split())
p = [list(map(int, input().split())) for _ in range(m)]

l = [[0]*n for i in range(n)]
for v in p:
    l[v[0]-1][v[1]-1] = 1
    l[v[1]-1][v[0]-1] = 1  #Löschen, wenn es sich um einen gerichteten Graphen handelt

print(l)  # [[0, 1, 1, 0, 1], ..., [1, 0, 1, 1, 0]]

Wenn es Gewicht gibt, ändert es sich leicht.

input_to_adj_m.py


n, m = map(int, input().split())
p = [list(map(int, input().split())) for _ in range(m)]

graph = [[0]*n for _ in range(n)]
for v in p:
    graph[v[0]-1][v[1]-1] = v[2]  #Hier ändert sich
    graph[v[1]-1][v[0]-1] = v[2]  #Löschen, wenn es sich um einen gerichteten Graphen handelt

print(graph)  # [[0, 1, 1, 0, 1], ..., [1, 0, 1, 0, 0]]

Eingabe in benachbarte Liste

input_to_adj_l.py


n, m = map(int, input().split())
p = [list(map(int, input().split())) for _ in range(m)]

graph = [[] for _ in range(n)]
for v in p:
    graph[v[0]-1].append(v[1])
    graph[v[1]-1].append(v[0])  #Löschen, wenn es sich um einen gerichteten Graphen handelt

print(graph)  # [[2, 3, 5], ..., [1, 3, 4]]

abschließend

Danke fürs Lesen. Ich wäre Ihnen dankbar, wenn Sie mir mitteilen könnten, ob Fehler oder Tippfehler vorliegen.

Recommended Posts

[Python] Erstellen einer Adjazenzmatrix / Adjazenzliste [Graphentheorie]
[Python] Verwendung von Liste 1
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Wie erstelle ich ein Python-Paket (geschrieben für Praktikanten)
[Python] Verwendung von Liste 3 Hinzugefügt
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
[Python] Wie erstelle ich eine Matrix aus sich wiederholenden Mustern (repmat / tile)
[Python] Wie man eine Klasse iterierbar macht
python3 So installieren Sie ein externes Modul
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
So konvertieren Sie Python in eine exe-Datei
Zusammenfassung der Verwendung der Python-Liste
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (11)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (8)
So löschen Sie einen Taple in einer Liste (Python)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (4)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (7)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (2)
So beschneiden Sie ein Bild mit Python + OpenCV
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (3)
[Algorithmus x Python] Verwendung der Liste
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (6)
So erstellen Sie das Substance Painter Python-Plugin (Einführung)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (5)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (10)
Wie man Python für Anfänger schneller macht [numpy]
So nehmen Sie Python Interpreter-Änderungen in Pycharm vor
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (9)
So entfernen Sie doppelte Elemente in der Python 3-Liste
So installieren Sie Python
So installieren Sie Python
Verwendung der Liste []
[Python] So entfernen Sie doppelte Werte aus der Liste
Erklären Sie ausführlich, wie Sie mit Python einen Sound erzeugen
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
[Python] Verwendung der Diagrammerstellungsbibliothek Altair
So erstellen Sie ein interaktives CLI-Tool mit Golang
So erstellen Sie ein Python-Paket mit VS Code
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
So erstellen Sie einen HTTPS-Server mit Go / Gin
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
So erstellen Sie einen Bild-Uploader mit Bottle (Python)
[Python] So erstellen Sie eine Korrelationsmatrix und eine Heatmap
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (12) (vollständig)
[Python] So geben Sie Listenwerte der Reihe nach aus
So installieren Sie Python [Windows]
python3: Verwendung der Flasche (2)
[Python] Liste in Pandas konvertieren [Pandas]
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
So mischen Sie einen Teil der Python-Liste (at random.shuffle)
So aktualisieren Sie Pythons Tkinter auf 8.6
[Python] Wie schreibe ich eine if-Anweisung in einen Satz?
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python