Ali Buch in Python: Sec. 2-5 Graph

Seite 93: Zweiteilige Diagrammbeurteilung


from Graph import join_dic  #Den Inhalt finden Sie im Vorbereitungsartikel
from Graph import d_to_ud  #Den Inhalt finden Sie im Vorbereitungsartikel

#############Machen Sie ein gerichtetes Diagramm###########
N = int(input())
graph = {}
while 1:
    edge = input()
    if edge == "":
        break

    edge = list(map(int, edge.split()))
    dic = {edge[0]: edge[1]}
    graph = join_dic(graph, dic)
##########################################

graph = d_to_ud(graph)   ###Ich möchte es rekursiv verarbeiten, also mache es zu einem ungerichteten Diagramm

for i in graph:
    if isinstance(graph[i], list):
        continue
    else:
        graph[i] = [graph[i]]   #### for i in graph[hoge]Damit kann die Verarbeitung mit vereinheitlicht werden, 

#Nachtrag) if not isinstance(graph[i],list)Ich hätte es tun sollen.

color = (N) * [0]

def coloring(start, col):  ##Können Sie die Verbindungskomponente malen, zu der der Knotenstart gehört?

    color[start] = col

    for i in graph[start]:
        if color[i] == col:  ##Heraus, wenn benachbarte Standorte dieselbe Farbe haben
            return False
        if color[i] == 0 and (not coloring(i, -col)):  ##Wenn die angrenzende Stelle farblos ist, malen Sie von dort aus mit der entgegengesetzten Farbe
            return False

    return True


def solve():
    for i in graph:
        if color[i] == 0:
            if not coloring(i, 1):    ##Können Sie von i ausgehen und die Verbindungskomponente anwenden?
                print("No")
                return 0

    print("Yes")
    return 0


solve()


Eingang:

4  
0 1
1 2
2 3
0 3

Ausgabe:

Yes

Eingang:

3
0 1
1 2
2 0

Ausgabe:

No

Da der Graph nicht immer verkettet ist, müssen alle Knoten betrachtet werden.

Seite 95: Bellmanford-Methode

Eingang:


3

0 1 1
1 2 1
0 2 3

0

2

Ausgabe:


2


import mygraph

print("number of nodes")
N = int(input())

print("input graph")
graph = mygraph.WeightedGraph()

while 1:

    inputline = input()

    if inputline == "":
        break

    inputline = list(map(int, inputline.split()))

    graph.join(inputline[0], inputline[1], inputline[2])

graph = graph.undirected()


for node in graph:
    if not isinstance(graph[node][0], list):
        graph[node] = [graph[node]]

print("Start?")
startpos = int(input())
print("Goal?")
goalpos = int(input())


dp = N * [float("INF")]


while 1:

    update = False

    dp[startpos] = 0

    for from_node in graph:

        neighbors = graph[from_node]

        for [to_node, weight] in neighbors:

            if dp[from_node] != float("INF") and dp[to_node] > dp[from_node] + weight:

                dp[to_node] = dp[from_node] + weight

                update = True

    if not update:
        break

print(dp[goalpos])

mygraph.py ist eine klassifizierte Version, die von @sishiracamus in den Kommentaren des Vorbereitungsartikels geschrieben wurde.

Recommended Posts

Ali Buch in Python: Sec. 2-5 Graph
Ali Buch in Python: Sec. 2-5 Graph (Vorbereitung)
Ali Buch in Python: Abschnitt 2-4, Datenstruktur
Ali Buch in Python: Sec.2-5 Dyxtra-Methode
Ali Buch in Python: Abschnitt 2-3, Dynamische Planung (DP)
Ali-Buch in Python: Selbstimplementierung der Prioritätswarteschlange
Ali-Buch in Python: Seite 43 Abschnittsplanung
Ameisenbuch in Python: Seite 49 Zaunreparatur
Zeichnen Sie ein Diagramm mit Python
Ameisenbuch in Python: Seite 47 Sarumans Armee (POJ 3069)
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Ameisenbuch mit Python (Kapitel 3 Zwischenausgabe ~)
Zeichnen Sie Daten einfach in Shell und Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
Von der Datei zur Diagrammzeichnung in Python. Grundstufe Grundstufe
Löse "AtCoder Version! Arimoto (Anfänger)" mit Python!
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python