Erstellen Sie Ihre eigene Diagrammstrukturklasse und deren Zeichnung mit Python

Erstellen Sie Ihre eigene Diagrammstrukturklasse und deren Zeichnung mit Python

Ich konnte das Problem des Diagramms, das in D von ABC160 von AtCoder gestellt wurde, nicht lösen. Nachdem ich Python studiert hatte, versuchte ich, die Diagrammstrukturklasse und sie mit maatplotlib zu zeichnen.

(Denken Sie über die Teilnahme an AtCoder nach) Code, an den ich mich gerne erinnert hätte, als ich zum ersten Mal an AtCoder teilgenommen habe (Reflection 1 zum nächsten Mal)

Es scheint *** NetworkX *** in der Bibliothek zu geben, das die Diagrammstruktur ausdrückt, aber ich werde es dieses Mal nicht verwenden. (Kann es nicht überhaupt mit AtCoder verwendet werden?)

Es gibt viele clevere Möglichkeiten, es auszudrücken: Da es sich um eine Implementierung innerhalb des Bereichs handelt, über den ein Amateur grob nachdenken kann, verzeihen Sie mir bitte, dass ich sie nicht erstellen kann.

Diagrammstrukturklasse

Konzept

Es wird angenommen, dass die Klasse ein Wörterbuch mit einem Knoten als Schlüssel und der Spitze der Kante als Wert als Elementvariable hat. Bereiten Sie die folgenden Methoden vor. ① Fügen Sie einen Knoten hinzu ② Fügen Sie eine Kante hinzu ③ Zeigen Sie den Knoten an ④ Geben Sie die Knoten als Liste zurück ⑤ Geben Sie den mit dem angegebenen Knoten verbundenen Knoten zurück

Klassendefinition

#Erstellen einer Diagrammstruktur
class cglaph():
  def __init__(self):
    #Knoteninitialisierung
    self.nodes={}

  def addnode(self,num):#① Fügen Sie einen Knoten hinzu
    for i in self.nodes.keys():
      if i==num:
        return(False)
    else:
      self.nodes[num]=list()
      return(True)

  def addedge(self,ag1,ag2):#② Fügen Sie eine Kante hinzu
    node1=min(ag1,ag2)
    node2=max(ag1,ag2)
    addok=False

    for i in self.nodes.keys():
      if i==node1:
        for j in self.nodes.keys():
          if j==node2:
            addok=True

    if addok:
      self.nodes[node1].append(node2)
      self.nodes[node2].append(node1)

  def printnodes(self):    #③ Zeigen Sie den Knoten an
    print("■Glaph:")
    print("vertice:neighbors")
    for k,v in self.nodes.items():
      print(k,":",v)


  def getnodes(self):#④ Gibt eine Liste der Knoten zurück
    keylist=list()

    for i in self.nodes.keys():
      keylist.append(i)
    return keylist

  def getedge(self, node):#⑤ Gibt die Kante (verbundener Knoten) des angegebenen Knotens zurück.
    return self.nodes[node]

Lassen Sie uns tatsächlich ein ungerichtetes Diagramm erstellen, das 5 Knoten entsprechend verbindet

G=cglaph()
G.addnode(1)#Knoten hinzufügen
G.addnode(2)
G.addnode(3)
G.addnode(4)
G.addnode(5)
G.addedge(1,2)#Kante hinzufügen
G.addedge(1,4)
G.addedge(5,3)

G.printnodes()#Liste der Knoten

nodelist=G.getnodes()#Knotenliste abrufen
print ("NODE LIST:",nodelist)

G.getedge(1)#Knoten mit Knoten 1 verbunden

cap1.PNG

Visualisierung der erstellten Graphstruktur

Lassen Sie uns nach dem Studium von matplotlib das Diagramm visualisieren, das ich erstellt habe. Ich wusste also nicht, was ich mit der Zeichenposition des Knotens anfangen sollte Wir haben beschlossen, die Knoten an zufälligen Positionen zu platzieren. Ich würde mir gerne überlegen, wie ich es in Zukunft in eine schöne Position bringen kann.

import matplotlib.pyplot as plt
import random
random.seed(0)

#Zufällig, weil ich nicht weiß, was ich mit der Knotenposition machen soll
N=len(nodelist)
x=[random.randint(0, 100) for i in range(N)]
y=[random.randint(0, 100) for i in range(N)]
print("x:",x)
print("y:",y)

#Diagrammerstellung
plt.figure(1)

#Knotenzeichnung
plt.scatter(x,y)

#Geben Sie der Knotenposition einen Knotennamen
ax=plt.axes()
for i in range(N):
  ax.annotate(nodelist[i],(x[i],y[i]),size=20)

#Eine Kante zeichnen Das ist nicht klug
for i in range(N):
  edges=G.getedge(i+1)
  for j in edges:
    plt.plot((x[i],x[j-1]),(y[i],y[j-1]), color='red')

plt.xlim(0, 100)
plt.ylim(0, 100)

cap2.PNG

Schließlich

Ich werde endlich anfangen, die Suche nach Breitenprioritäten zu studieren!

Referenz

[Matplotlib] Anmerkungen und Pfeile

<Python, matplotlib> Fügen Sie jedem Element des Streudiagramms Zeichen hinzu.

Lassen Sie uns das Netzwerk mit Python analysieren und visualisieren! Erforderliche Verfahrenszusammenfassung

So rufen Sie Elemente mit der for-Schleife des Python-Wörterbuchs ab (dict)

Recommended Posts

Erstellen Sie Ihre eigene Diagrammstrukturklasse und deren Zeichnung mit Python
Erstellen Sie Ihre eigenen Linux-Befehle in Python
Diagrammzeichnung mit Python
Erstellen Sie Ihre eigenen Big Data in Python zur Validierung
Erstellen Sie Ihr eigenes Random Dot Stereogram (RDS) in Python.
[Road to Intermediate Python] Definieren Sie in Ihrer eigenen Klasse
[Python] Anmelden Ihres eigenen Moduls
Erstellen und lesen Sie Messagepacks in Python
Verwenden Sie einfach Ihre eigenen Funktionen in Python
[Python] Packen und verteilen Sie Ihre eigenen Module
Zeichnen Sie Daten einfach in Shell und Python
Holen Sie sich Ihre eigene IP-Adresse in Python
[Python] Implementieren Sie Ihre eigene listenähnliche Klasse mit collection.UserList
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Von der Datei zur Diagrammzeichnung in Python. Grundstufe Grundstufe
Erstellen Sie automatisch Wort- und Excel-Berichte mit Python
Ich habe eine Klasse in Python3 und Java geschrieben
Importieren Sie Ihre eigenen Module mit der Python-Entwicklung von Grasshopper
Python: Verwenden Sie Ihre eigene Klasse für Numpy Ndarray
Erstellen Sie Ihre eigene Ausnahme
Memo zum Erstellen einer eigenen Box mit Peppers Python
Fallklasse in Python
Versuchen Sie, Ihr eigenes Intro-Quiz mit Python zu verbessern
Erstellen Sie Spatia Lite in Python
Bis zum Zeichnen eines 3D-Diagramms mit Python in Windows 10
[Blender x Python] Erstellen Sie Ihre eigene Funktion und Zusammenfassung
Verwenden Sie CASA Toolkit in Ihrer eigenen Python-Umgebung
Finden Sie die Hermite-Matrix und ihre eindeutigen Werte in Python
C sprachähnliche Struktur in Python
Erstellen Sie Ihre erste GDSII-Datei in Python mit gdspy
Rufen Sie die aktuellen Standortinformationen und den Benutzeragenten in Python ab
Holen Sie sich Aktienkurse und erstellen Sie mit Python Kerzendiagramme
Zeichnen Sie ein Diagramm mit Python
Klassennotation in Python
Beispiel für das Abrufen des Modulnamens und des Klassennamens in Python
[Python] Wenn Sie Ihr eigenes Paket im oberen Verzeichnis importieren und verwenden möchten
Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
Referenzreihenfolge von Klassenvariablen und Instanzvariablen in "self. Klassenvariablen" in Python
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Reinforcement Learning 23 Erstellen und verwenden Sie Ihr eigenes Modul mit Colaboratory
Zeichnen wir ein Diagramm der Poisson-Verteilung und der kumulativen Poisson-Verteilung in Python bzw. Java.
Python: Klassen- und Instanzvariablen
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Python-Klassen- und Instanzvariablen
Stapel und Warteschlange in Python
Erstellen Sie Ihre eigene Django-Middleware
Unittest und CI in Python
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
Docker ausprobieren: Erstellen Sie Ihr eigenes Container-Image für eine Python-Web-App
Wirf etwas mit Python in Kinesis und stelle sicher, dass es drin ist
Erstellen Sie Ihre eigene IoT-Plattform mit Himbeerpi und ESP32 (Teil 1)
Ich war süchtig nach falschen Klassenvariablen und Instanzvariablen in Python
[Python] Erstelle deinen eigenen LINE-Bot
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten