Ein anmutiger Graph ist eine Art einfacher Graph . Anmutige Diagramme sind etwas Besonderes, da es eine Möglichkeit gibt, alle ihre Knoten mit positiven Ganzzahlen zu kennzeichnen, sodass, wenn die Kanten auch mit den Unterschieden der Knoten gekennzeichnet sind, die sie verbinden, keine zwei Kanten dieselbe Beschriftung und jede Beschriftung bis zur Anzahl der Kanten haben wird genutzt.
Ausgearbeitetes Beispiel
Hier ist ein einfaches Diagramm, von dem wir vermuten, dass es ein anmutiges Diagramm ist
Versuchen wir die folgende Kennzeichnung:
Beachten Sie, dass wir Ganzzahlen in unserer Knotenbeschriftung überspringen dürfen. Jetzt beschriften wir jede Kante mit dem positiven Unterschied zwischen den Knoten, die sie verbindet. Zur besseren Sichtbarkeit habe ich diese rot beschriftet.
Jede Kante hat eine eindeutige Nummer und es wird keine Nummer zwischen 1 und 7 (die Anzahl der Kanten, die wir haben) ausgelassen. Somit ist unser Graph anmutig.
Aufgabe
Bei einem gegebenen Diagramm wird über eine vernünftige Eingabemethode ein wahrheitsgemäßer Wert ausgegeben, wenn er anmutig ist, und ansonsten ein falscher Wert.
Dies ist Code-Golf, daher besteht das Ziel darin, die Anzahl Ihrer Bytes zu minimieren.
Testfälle
Hier werden Diagramme als Array von Kanten dargestellt:
3 nodes:
[(0,1),(0,2),(1,2)]
True
Labeling:
Node 0 -> 0
Node 1 -> 2
Node 2 -> 3
5 nodes:
[(0,1),(0,4),(1,2),(2,3),(3,4)]
False
5 nodes:
[(0,1),(1,2),(2,3),(3,4)]
True
Labeling:
Node 0 -> 0
Node 1 -> 1
Node 2 -> 3
Node 3 -> 6
Node 4 -> 10
9 nodes
[(0,1),(1,2),(1,7),(1,8),(2,3),(2,6),(3,4),(4,5)]
True
Labeling:
Node 0 -> 0
Node 1 -> 1
Node 2 -> 3
Node 3 -> 6
Node 4 -> 10
Node 5 -> 15
Node 6 -> 11
Node 7 -> 7
Node 8 -> 8
5 nodes
[(0,1),(0,2),(1,2),(1,3),(1,4),(3,4)]
False
quelle
[(0,1),(1,2),(2,3),(3,4)]
ist wahrscheinlich ein bemerkenswerter Randfall.{(k-1,k) : 0 < k < n}
erfordern Diagramme des Formulars die höchsten Beschriftungen aller Diagramme mit der gleichen Anzahl von Knoten.n(n+1)/2
als ihr höchstes Label verlangen . Ich habe Ihren Testfall hinzugefügt.Antworten:
Gelee , 12 Bytes
Nimmt ein Array von Kanten als 1-indizierte Knotenpaare.
Probieren Sie es online aus! (Schrecklich ineffizient. Kümmern Sie sich nicht um die eigentlichen Testfälle.)
Wie es funktioniert
quelle
ḅ-
ist einer meiner Lieblings-Jelly-Tricks :-)Mathematica,
121116 BytesBearbeiten: 5 Bytes dank JungHwan Min und Martin Ender gespeichert
Erläuterung
Reine Funktion, die ein Mathematica-
Graph
Objekt mit Eckpunkten{1, 2, ..., k}
für eine nichtnegative Ganzzahl verwendetk
. Im schlimmsten Fall benötigen wir nur Scheitelpunktbeschriftungen von1
bis1 + (1 + 2 + ... EdgeCount@#)
. Da wir später einige Bytes sparen, werden wire
die Liste der Kanten undn
die Liste sein{1, 2, ..., EdgeCount@#}
, sodass die Scheitelpunktgewichte daraus gezogen werdenRange[1+Tr[n=Range@Length[e=EdgeList@#]]]
. Wir generieren eine Liste mit der gesamtenTuples
LängeVertexCount@#
, wählen dann die Liste mitCases
den richtigen Beschriftungen aus und prüfen, ob das ErgebnisUnequal
in der leeren Liste enthalten ist{}
. Gracefulness der Liste der Vertex - Gewichtew
wird durch kontrolliertMap
ping die FunktionAbs[#-#2]&@@w[[List@@#]]&
über die Liste der Kantene
,Sort
ing das Ergebnis, und zu prüfen , ob das ErgebnisEqual
zun
. Hier ist eine Aufschlüsselung dieser Funktion:quelle
VertexCount[#]
VertexCount@#
Tr
Trick,Length
Bytes nicht mehr zu speichern, wenn Sie Klammern hinzufügen müssen.Length[e=EdgeList@#]
ist die gleiche Länge. Aber es ist kürzer, dies insgesamt zu vermeiden und die dreieckige Zahl dort neu zu schreiben alsTr@Range@EdgeCount@#
(unde
am Ende durch zu ersetzenEdgeList@#
. Zweitens speichert der Funktionsoperator selten Bytes, in diesem Fall denke ich, dass es kürzer ist,Cases
anstelle vonSelect
und dannw_/;
statt zu verwendenw
.