Cyclic Group Graph

Author

Eric W. Weisstein
January 14, 2025

This notebook downloaded from http://mathworld.wolfram.com/notebooks/GraphTheory/CyclicGroupGraph.nb.

For more information, see Eric's MathWorld entry http://mathworld.wolfram.com/CyclicGroupGraph.html.

©2025 Wolfram Research, Inc. except for portions noted otherwise

Cyclic group recognition

{g1,g2}={,};

IsomorphicGraphQ[g1,g2]

CyclicPermutationGroupQ[GraphAutomorphismGroup[#]]&/@{g1,g2}

CyclicPermutationGroupQ[GraphAutomorphismGroup[#]]&/@{,,}

Graphs with cyclic automorphism groups

Graphs up to 9 nodes

Do[Graphs[n],{n,9}];

Do[Print[{n,Select[Graphs[n],CyclicGroupGraphQ]//Timing}],{n,9}]

RecognizeGraph/@{,,,}

GraphData ;; 100

data=Monitor[{gn=#,Sequence@@Timing[CyclicGroupGraphQ[GraphData[gn=#]]]}&/@GraphData[;;100],gn];//Timing

Cases[data,{gn_,_,$Failed}:>gn]

TextGrid[Take[ReverseSortBy[data,#[[2]]&],10],Dividers->All]

sorted=Sort[GraphData[#,{"|Aut|","V","#"}]&/@Cases[data,{gn_,_,True}:>gn]]

TextGrid[sorted,Dividers->All,Alignment->{{{Decimal},Left}}]

GraphData ;; 250

data=Monitor[{gn=#,Sequence@@Timing[CyclicGroupGraphQ[GraphData[gn=#]]]}&/@GraphData[;;250],gn];//Timing

Cases[data,{gn_,_,$Failed}:>gn]

TextGrid[Take[ReverseSortBy[data,#[[2]]&],10],Dividers->All]

sorted=Sort[GraphData[#,{"|Aut|","V","#"}]&/@Cases[data,{gn_,_,True}:>gn]]

TextGrid[sorted,Dividers->All,Alignment->{{{Decimal},Left}}]

GraphData using |generators| == 1 test (does not catch all cyclic group graphs)

TextGrid[sorted=Sort[{GroupOrder[GraphAutomorphismGroup[GraphData[#]]],GraphData[#,"V"],#}&/@cyclic],Dividers->All,Alignment->{{{Decimal},Left}}]

Figure

SortBy[Cases[sorted,{3,9,gn_}:>gn],GraphData[#,"EdgeCount"]&]

GraphicsRow[StyleGraphs[GraphData[#],PlotLabel->Style[Row[{Style["V",Italic]," == 9, ",Style["E",Italic]," == "<>ToString[GraphData[#,"M"]]<>", |Aut| == 3"}],Directive[Black,FontFamily->"Times",14]]]&/@Table[{"C3GroupGraph",{9,i}},{i,4}],Alignment->Top,Dividers->All,ImageSize->700]

Old figure

GraphicsGrid[Flatten[Partition[#,4,4,{1,1},{}]&/@Map[Show[If[Head[g=GraphData[Last[#]]]===GraphData,GraphPlot[GetGraph[Last[#]]],g],PlotLabel->TextCell[GetGraphData[Last[#],"Name"]<>"\n(n == "<>ToString@GetGraphData[Last[#],"V"]<>", |Aut| == "<>ToString@GetGraphData[Last[#],"AutomorphismCount"]<>")",PageWidth->120,TextAlignment->Center],BaseStyle->{FontSlant->Italic,FontSize->10}]&,
Split[cyc,First[#1]==First[#2]&],{2}],1],ImageSize->500]//Quiet

Preload

Length[Graphs[8]]//Timing//AbsoluteTiming

Length[Graphs[9]]//Timing//AbsoluteTiming

Length[Graphs[10]]//Timing//AbsoluteTiming

C3 (4 on 9 nodes, 56 on 10 nodes)

All groups of prime order are cyclic

FiniteGroupCount[3]

FiniteGroupData[3]

Only group of order 3 is cyclic so don't have to check for cyclic-ness

GraphData["SmallestCyclicGroupGraph"]//StyleGraphs

Do[Print[{n,Length[pos=Flatten[Position[Get[FileNameJoin[{$GraphDataDirectory,"Nodes","AutomorphismCount","AutomorphismCount_"<>If[n==10,"","0"]<>ToString[n]<>".m"}]],3]]],pos}],{n,10}]

g9=Graphs[9][[{159666,215668,240247,251704}]]

CyclicGroupGraphQ/@g9

RecognizeGraph/@%

Do[Print[{n,Select[Graphs[n],GroupOrder[GraphAutomorphismGroup[#]]==3&]//Timing}],{n,10}];

RecognizeGraph/@{,,,}

Sort[{EdgeCount[#],#}&/@{,,,}]

C4 (12 on 10 nodes)

FiniteGroupData[4]

There is a group of order 4 that is not cyclic so need to check for cyclic-ness

Do[Print[{n,Length[pos=Flatten[Position[Get[FileNameJoin[{$GraphDataDirectory,"Nodes","AutomorphismCount","AutomorphismCount_"<>If[n==10,"","0"]<>ToString[n]<>".m"}]],4]]],pos}],{n,7}]

Do[
Print[{n,Select[Graphs[n],GroupOrder[aut=GraphAutomorphismGroup[#]]==4&&CyclicPermutationGroupQ[aut]&]//Timing}],
{n,10}]

C4GroupGraphs=Sort[{EdgeCount[#],#}&/@{,,,,,,,,,,,}]

Length[C4GroupGraphs]

RecognizeGraph[#,"Cache"->"InternalOnly"]&/@C4GroupGraphs[[All,2]]

Select[C4GroupGraphs,IsomorphicGraphQ[#[[2]],SquareWithtangledHats]&]

CyclicGraphQ/@C4GroupGraphs[[All,2]]

GroupOrder[GraphAutomorphismGroup[#]]&/@C4GroupGraphs[[All,2]]

Select[C4GroupGraphs[[All,2]],Length[GroupGenerators[GraphAutomorphismGroup[#]]]==1&]

GraphicsGrid[Partition[StyleGraphs[#2,PlotLabel->Style[Row[{Style["V",Italic]," == 10, ",Style["E",Italic]," == "<>ToString[#]<>", |Aut| == 4"}],Directive[Black,FontFamily->"Times",14]]]&@@@C4GroupGraphs,UpTo[4]],Alignment->Top,Dividers->All,ImageSize->700]

C5 (none ≤ 10 nodes)

FiniteGroupData[5]

FiniteGroupCount[5]

Only group of order 5 is cyclic

Do[Print[{n,Length[pos=Flatten[Position[Get[FileNameJoin[{$GraphDataDirectory,"Nodes","AutomorphismCount","AutomorphismCount_"<>If[n==10,"","0"]<>ToString[n]<>".m"}]],5]]],pos}],{n,10}]

C6 XXX

FiniteGroupCount[6]

FiniteGroupData[6]

There is a group of order6 that is not cyclic so need to check for cyclic-ness

Do[Print[{n,Length[pos=Flatten[Position[Get[FileNameJoin[{$GraphDataDirectory,"Nodes","AutomorphismCount","AutomorphismCount_"<>If[n==10,"","0"]<>ToString[n]<>".m"}]],6]]],pos}],{n,8}]

Do[
Print[{n,Select[Graphs[n],GroupOrder[aut=GraphAutomorphismGroup[#]]==6&&CyclicPermutationGroupQ[aut]&]//Timing}],
{n,10}]

C4GroupGraphs=Sort[{EdgeCount[#],#}&/@{}]

Length[C4GroupGraphs]

RecognizeGraph[#,"Cache"->"InternalOnly"]&/@C4GroupGraphs[[All,2]]

Select[C4GroupGraphs,IsomorphicGraphQ[#[[2]],SquareWithtangledHats]&]

CyclicGraphQ/@C4GroupGraphs[[All,2]]

GroupOrder[GraphAutomorphismGroup[#]]&/@C4GroupGraphs[[All,2]]

Select[C4GroupGraphs[[All,2]],Length[GroupGenerators[GraphAutomorphismGroup[#]]]==1&]

GraphicsGrid[Partition[StyleGraphs[#2,PlotLabel->Style[Row[{Style["V",Italic]," == 10, ",Style["E",Italic]," == "<>ToString[#]<>", |Aut| == 4"}],Directive[Black,FontFamily->"Times",14]]]&@@@C4GroupGraphs,UpTo[4]],Alignment->Top,Dividers->All,ImageSize->700]

C6 or higher

Do[
Print[{n,Select[Graphs[n],GroupOrder[aut=GraphAutomorphismGroup[#]]>5&&CyclicPermutationGroupQ[aut]&]//Timing}],
{n,10}]

C7 (none ≤ 10 nodes)

FiniteGroupData[7]

FiniteGroupCount[7]

Only group of order 7 is cyclic

Do[Print[{n,Length[pos=Flatten[Position[Get[FileNameJoin[{$GraphDataDirectory,"Nodes","AutomorphismCount","AutomorphismCount_"<>If[n==10,"","0"]<>ToString[n]<>".m"}]],7]]],pos}],{n,10}]

Embeddings

<<MathWorld`Graphs`

{"C3GroupGraph", {9, 1}}

Names

GraphData[{"C3GroupGraph",{9,1}},"StandardName"]

GraphData[{"C3GroupGraph",{9,1}},"StandardNames"]

Primary

GraphData[{"C3GroupGraph",{9,1}}]//StyleGraphs[#,ImageSize->Small]&

All

Quit

GraphData[{"C3GroupGraph",{9,1}},"Graph","All"]//StyleGraphs

Inexact

Select[GraphData[{"C3GroupGraph",{9,1}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Embedding types

GraphDataEmbeddings[GraphData[{"C3GroupGraph",{9,1}}]]

Default embedding

GraphPlot[Graph[GraphData[{"C3GroupGraph",{9,1}},"VertexList"],GraphData[{"C3GroupGraph",{9,1}},"Edges"]]]

v={};
g=Graph[Range@Length@v,UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph@g

Degenerate

GraphData[{"C3GroupGraph",{9,1}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"C3GroupGraph",{9,1}},"Graph","Degenerate"]

GeneralizedPetersen

GraphData[{"C3GroupGraph",{9,1}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"C3GroupGraph",{9,1}},"Graph","IGraph"]//StyleGraphs

Bilateral

GraphData[{"C3GroupGraph",{9,1}},"Graph","Bilateral"]//StyleGraphs

Grid[DeleteCases[Monitor[{g=#,BilateralGraphEmbeddingTypes[#],GraphSymmetryGroup[#]}&/@GraphData[{"C3GroupGraph",{9,1}},"Graph","All"],g],{_,_,TransformationGroup[{}]}],Dividers->All,Alignment->{{Center,{Left}}}]

Circular

GraphData[{"C3GroupGraph",{9,1}},"Graph","Circular"]//StyleGraphs

Circular construction

GraphData[{"C3GroupGraph",{9,1}},"Hamiltonian"]

GraphData[{"C3GroupGraph",{9,1}},"LCF"]

GraphData[{"C3GroupGraph",{9,1}},"HamiltonianCycleCount"]

Length[hc=FindHamiltonianCycle[GraphData[{"C3GroupGraph",{9,1}}],All][[All,All,1]]]//Timing

(circ=CircularEmbeddingFromHamiltonianCycle[GraphData[{"C3GroupGraph",{9,1}}],#]&/@hc);//Timing

graphswithsymmetrygroups={#,GraphSymmetryGroup[#]}&/@circ;//Timing

Tally[graphswithsymmetrygroups[[All,-1]]]//Column

(bilaterallyrotatedgraphs={BilaterallyRotatedGraph[#,"ReturnNonbilateralGraph"->True],#2}&@@@SortBy[
DeleteCases[graphswithsymmetrygroups,{_,TransformationGroup[{}]}],
{MatchQ[#[[2]],TransformationGroup[{_Rotation,r_Reflection}|{r_Reflection|_Rotation}]],FirstCase[#[[2]],Rotation[{0,0},r_]:>N[r/π],{},{0,∞}]}&
])//Timing

Length[symmetricgraphs=DeleteDuplicatesBy[bilaterallyrotatedgraphs,CircularCanonicalGraphEmbedding[#[[1]]]&]]//Timing

symmetricgraphs

gs=symmetricgraphs[[All,1]]

Planar

GraphData[{"C3GroupGraph",{9,1}},"Planar"]

GraphData[{"C3GroupGraph",{9,1}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"C3GroupGraph",{9,1}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"C3GroupGraph",{9,1}}]],10]

PlanarGraphEmbeddings

GraphData[{"C3GroupGraph",{9,1}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"C3GroupGraph",{9,1}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"C3GroupGraph",{9,1}},{"RCN","CN"}]

GraphData[{"C3GroupGraph",{9,1}},"Graph","MinimalCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"C3GroupGraph",{9,1}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"C3GroupGraph",{9,1}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"C3GroupGraph",{9,1}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"C3GroupGraph",{9,1}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"C3GroupGraph",{9,1}},"Circulant"]

GraphData[{"C3GroupGraph",{9,1}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"C3GroupGraph",{9,1}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"C3GroupGraph",{9,1}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"C3GroupGraph",{9,1}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"C3GroupGraph",{9,1}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"C3GroupGraph",{9,1}},"Line"]

LineGraphQ[GraphData[{"C3GroupGraph",{9,1}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"C3GroupGraph",{9,1}}&]

RootGraph[GraphData[{"C3GroupGraph",{9,1}}]]

RecognizeGraph[%]

Halin

GraphData[{"C3GroupGraph",{9,1}},"Halin"]

GraphData[{"C3GroupGraph",{9,1}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"C3GroupGraph",{9,1}},"Rigid"]

GraphData[{"C3GroupGraph",{9,1}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"C3GroupGraph",{9,1}},"Flexible"]

GraphData[{"C3GroupGraph",{9,1}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"C3GroupGraph",{9,1}},"LCF"]

GraphData[{"C3GroupGraph",{9,1}},"HamiltonianCycleCount"]

GraphData[{"C3GroupGraph",{9,1}},"LCFSignature"]

GraphData[{"C3GroupGraph",{9,1}},"LCFNotations"]

GraphData[{"C3GroupGraph",{9,1}},"Graph","LCF"]//StyleGraphs

Tally[LCFNotation[#][[2]]&/@%]

UnitDistance

GraphData[{"C3GroupGraph",{9,1}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"C3GroupGraph",{9,1}}],Debug->True]//Timing

GraphData[{"C3GroupGraph",{9,1}},"Graph","UnitDistance"]//StyleGraphs

Select[%,!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&]

UnitDistance by refinement

UnitDistanceEmbeddingRefine[Graph[GraphData[{"C3GroupGraph",{9,1}},"VertexList"],GraphData[{"C3GroupGraph",{9,1}},"EdgeList"]],MaxIterations->500]

UnitDistanceGraphEmbeddingQ[%]

UnitDistanceEmbeddingRefine[Annotate[#,VertexCoordinates->N[GraphEmbedding[#]]],MaxIterations->500]&/@Complement@@(GraphData[{"C3GroupGraph",{9,1}},"Graph",#]&/@{"All","UnitDistance"})

Select[%,UnitDistanceGraphEmbeddingQ]

UnitDistance by FindUnitDistanceEmbedding

FindUnitDistanceEmbedding[GraphData[{"C3GroupGraph",{9,1}}],MaxIterations->5000,"ReturnWithMessage"->True]//Timing

FindUnitDistanceEmbedding[GraphData[{"C3GroupGraph",{9,1}}],MaxIterations->5000,"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{{"C3GroupGraph",{9,1}},l=FindSubgraphUnitDistanceEmbedding[GraphData[{"C3GroupGraph",{9,1}}],TimeConstraint->300,"Results"->All]//Timing}

gs=SortBy[UniqueEmbeddings[l],Replace[RectilinearCrossingCount[#],Infinity->0]&]

Select[IndexGraph/@gs,!DegenerateGraphEmbeddingQ[#]&&GraphSymmetryGroup[#]=!=TransformationGroup[{}]&]//Timing

Matchstick

GraphData[{"C3GroupGraph",{9,1}},"Matchstick"]

GraphData[{"C3GroupGraph",{9,1}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"C3GroupGraph",{9,1}},"Edges"]]

3D construction

v={};
g=Graph[Range[Length[v]],UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

3D All

GraphData[{"C3GroupGraph",{9,1}},"Graph",{"3D","All"}]

3D UnitDistance

GraphData[{"C3GroupGraph",{9,1}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"C3GroupGraph",{9,1}},"Polyhedral"]

GraphData[{"C3GroupGraph",{9,1}},"Graph",{"3D","Polyhedron"}]

{"C3GroupGraph", {9, 2}} == {"Configuration", {{9, 3}, 1}}

Names

GraphData[{"C3GroupGraph",{9,2}},"StandardName"]

GraphData[{"C3GroupGraph",{9,2}},"StandardNames"]

{"C3GroupGraph", {9, 3}}

Names

GraphData[{"C3GroupGraph",{9,3}},"StandardName"]

GraphData[{"C3GroupGraph",{9,3}},"StandardNames"]

Primary

GraphData[{"C3GroupGraph",{9,3}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"C3GroupGraph",{9,3}},"Graph","All"]//StyleGraphs

Inexact

Select[GraphData[{"C3GroupGraph",{9,3}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Embedding types

GraphDataEmbeddings[GraphData[{"C3GroupGraph",{9,3}}]]

Default embedding

GraphPlot[RotateGraph[Graph[GraphData[{"C3GroupGraph",{9,3}},"VertexList"],GraphData[{"C3GroupGraph",{9,3}},"Edges"],GraphLayout->"HighDimensionalEmbedding"],-.35]]

GraphPlot@RotateGraph[GraphicsToGraph@,Pi/2]

Mean[{{-1,0},{1,0},{0,Sqrt[3]}}]

v={{-1,0},{1,0},{0,Sqrt[3]}};
v=Join[v,Mean/@Partition[v,2,1,1],CirclePoints[{0,(1/(Sqrt[3]))},{1/2,q},3]];

FullSimplify[RegionDistance[Line[v[[{2,8}]]],v[[9]]],q>0]

Solve[ 35+24 Cos[q]+16 Cos[2 q]-8 (Sqrt[3]) (1+4 Cos[q]) Sin[q]==0,q]//FullSimplify

ArcTan[(Sqrt[3]) (1-(4/(3+(Sqrt[61]))))]//N

ArcTan[(1/13) (Sqrt[3]) (16+(Sqrt[61]))]//N

v={{-1,0},{1,0},{0,Sqrt[3]}};
v=Join[v,Mean/@Partition[v,2,1,1],CirclePoints[{0,(1/(Sqrt[3]))},{1/2,ArcTan[(1/13) (Sqrt[3]) (16+(Sqrt[61]))]},3]];
g=Graph[Range@Length@v,UndirectedEdge@@@{e[1,4,2,5,3,6,1,8,7,6,4,5,6],e[4,8,9,2],{9,5},e[3,7,9]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph@g

v={{-1,0},{1,0},{0,Sqrt[3]}};
v=Join[v,Mean/@Partition[v,2,1,1],CirclePoints[{0,(1/(Sqrt[3]))},{1/2,Pi/2},3]];
g=Graph[Range@Length@v,UndirectedEdge@@@{e[1,4,2,5,3,6,1,8,7,6,4,5,6],e[4,8,9,2],{9,5},e[3,7,9]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph@g

gs=UnlabelGraph/@{,,,,,}

Degenerate

GraphData[{"C3GroupGraph",{9,3}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"C3GroupGraph",{9,3}},"Graph","Degenerate"]

Configuration

GetGraphData[{"C3GroupGraph",{9,3}},"File"]

GraphData[{"C3GroupGraph",{9,3}},"Configuration"]

GraphData[{"C3GroupGraph",{9,3}},"Graph","Configuration"]//StyleGraphs

Configuration...

config=%[[1]]

(alledges=AddAllConfigurationEdges[config])//Timing

RecognizeGraph@alledges

ConfigurationDiagram[config,.2]

lines=ConfigurationLines[config]

ConfigurationNotation[lines]

GraphData[{"C3GroupGraph",{9,3}},"IncidenceLines"]

levi=LeviGraph[lines]

RecognizeGraph[levi]

GraphData[{"C3GroupGraph",{9,3}},"LeviGraph","Name"]

FirstCase[GraphData[{"C3GroupGraph",{9,3}},"StandardNames"],{"Incidence",_}]

Cases[GraphData[{"C3GroupGraph",{9,3}},"StandardNames"],_String?(StringMatchQ[#,"*Configuration*"]&)]

GraphData[{"C3GroupGraph",{9,3}},"OrdinaryLineGraphName"]

(ordinarylinegraph=OrdinaryLineGraph[config])//Timing

RecognizeGraph@ordinarylinegraph

Incidence

GetGraphData[{"C3GroupGraph",{9,3}},"File"]

GraphData[{"C3GroupGraph",{9,3}},"Incidence"]

Select[GraphData[All],GraphData[#,"LeviGraph","Name"]==={"C3GroupGraph",{9,3}}&]

lines=GraphData[{"C3GroupGraph",{9,3}},"IncidenceLines"]

ConfigurationNotation[lines]

levi=LeviGraph[lines]

RecognizeGraph@levi

GeneralizedPetersen

GraphData[{"C3GroupGraph",{9,3}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"C3GroupGraph",{9,3}},"Graph","IGraph"]//StyleGraphs

Bilateral

GraphData[{"C3GroupGraph",{9,3}},"Graph","Bilateral"]//StyleGraphs

Grid[DeleteCases[Monitor[{g=#,BilateralGraphEmbeddingTypes[#],GraphSymmetryGroup[#]}&/@GraphData[{"C3GroupGraph",{9,3}},"Graph","All"],g],{_,_,TransformationGroup[{}]}],Dividers->All,Alignment->{{Center,{Left}}}]

Circular

GraphData[{"C3GroupGraph",{9,3}},"Graph","Circular"]//StyleGraphs

Circular construction

GraphData[{"C3GroupGraph",{9,3}},"Hamiltonian"]

GraphData[{"C3GroupGraph",{9,3}},"LCF"]

GraphData[{"C3GroupGraph",{9,3}},"HamiltonianCycleCount"]

Length[hc=FindHamiltonianCycle[GraphData[{"C3GroupGraph",{9,3}}],All][[All,All,1]]]//Timing

(circ=CircularEmbeddingFromHamiltonianCycle[GraphData[{"C3GroupGraph",{9,3}}],#]&/@hc);//Timing

graphswithsymmetrygroups={#,GraphSymmetryGroup[#]}&/@circ;//Timing

Tally[graphswithsymmetrygroups[[All,-1]]]//Column

(bilaterallyrotatedgraphs={BilaterallyRotatedGraph[#,"ReturnNonbilateralGraph"->True],#2}&@@@SortBy[
DeleteCases[graphswithsymmetrygroups,{_,TransformationGroup[{}]}],
{MatchQ[#[[2]],TransformationGroup[{_Rotation,r_Reflection}|{r_Reflection|_Rotation}]],FirstCase[#[[2]],Rotation[{0,0},r_]:>N[r/π],{},{0,∞}]}&
])//Timing

Length[symmetricgraphs=DeleteDuplicatesBy[bilaterallyrotatedgraphs,CircularCanonicalGraphEmbedding[#[[1]]]&]]//Timing

symmetricgraphs

gs=symmetricgraphs[[All,1]]

Planar

GraphData[{"C3GroupGraph",{9,3}},"Planar"]

GraphData[{"C3GroupGraph",{9,3}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"C3GroupGraph",{9,3}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"C3GroupGraph",{9,3}}]],10]

PlanarGraphEmbeddings

GraphData[{"C3GroupGraph",{9,3}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"C3GroupGraph",{9,3}}],Debug->True])//Timing

Length[plemb]

Tutte embeddings

faces=ReverseSort@SymmetricallyDistinctFaces[GraphData[{"C3GroupGraph",{9,3}}]]

Tally[ReverseSort[Length/@faces]]

gs=IGLayoutTutte[GraphData[{"C3GroupGraph",{9,3}}],"OuterFace"->#]&/@faces

TextGrid[DeleteCases[{#,GraphSymmetryGroup[#]}&/@gs,{_,TransformationGroup[{}]}],Dividers->All]

Grid[DeleteCases[{#,Cases[GraphSymmetryGroup[#],r_Rotation:>r,∞]}&/@gs,{_,{}}],Dividers->All]

gs=Annotate[#,{VertexLabels->None,ImageSize->Tiny}]&/@{}

RecognizeGraph/@gs

Tutte embedding construction  3 #1

GraphPlot@

v=Join[CirclePoints[3],CirclePoints[{1/2,Pi/2-Pi/20},3],CirclePoints[{a,Pi/2+Pi/20},3]];

FullSimplify[RegionDistance[Line@v[[{5,4}]],v[[7]]],a>0]

Solve[(Sqrt[3])-a (-1+(Sqrt[5])+4 Cos[(π/15)])==0,a]//FullSimplify

N[%]

v=Join[CirclePoints[3],CirclePoints[{1/2,Pi/2-Pi/20},3],CirclePoints[{((Sqrt[3])/(-1+(Sqrt[5])+4 Cos[(π/15)])),Pi/2+Pi/20},3]];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[9,1,2,3,1,6,9,4,7,5,8,6],e[5,3,8,7,2,4],e[8,9,7]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction  3 #2

GraphPlot@

v=Join[CirclePoints[3],CirclePoints[{2/5,Pi/2},6]];
g=Graph[Range[Length[v]],UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

g=FindCorrespondingGraph[,v]

RecognizeGraph[g]

MinimalCrossing

GraphData[{"C3GroupGraph",{9,3}},{"RCN","CN"}]

GraphData[{"C3GroupGraph",{9,3}},"Graph","MinimalCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"C3GroupGraph",{9,3}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"C3GroupGraph",{9,3}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"C3GroupGraph",{9,3}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"C3GroupGraph",{9,3}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"C3GroupGraph",{9,3}},"Circulant"]

GraphData[{"C3GroupGraph",{9,3}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"C3GroupGraph",{9,3}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"C3GroupGraph",{9,3}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"C3GroupGraph",{9,3}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"C3GroupGraph",{9,3}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"C3GroupGraph",{9,3}},"Line"]

LineGraphQ[GraphData[{"C3GroupGraph",{9,3}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"C3GroupGraph",{9,3}}&]

RootGraph[GraphData[{"C3GroupGraph",{9,3}}]]

RecognizeGraph[%]

Halin

GraphData[{"C3GroupGraph",{9,3}},"Halin"]

GraphData[{"C3GroupGraph",{9,3}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"C3GroupGraph",{9,3}},"Rigid"]

GraphData[{"C3GroupGraph",{9,3}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"C3GroupGraph",{9,3}},"Flexible"]

GraphData[{"C3GroupGraph",{9,3}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"C3GroupGraph",{9,3}},"LCF"]

GraphData[{"C3GroupGraph",{9,3}},"HamiltonianCycleCount"]

GraphData[{"C3GroupGraph",{9,3}},"LCFSignature"]

GraphData[{"C3GroupGraph",{9,3}},"LCFNotations"]

GraphData[{"C3GroupGraph",{9,3}},"Graph","LCF"]//StyleGraphs

Tally[LCFNotation[#][[2]]&/@%]

UnitDistance

GraphData[{"C3GroupGraph",{9,3}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"C3GroupGraph",{9,3}}],Debug->True]//Timing

GraphData[{"C3GroupGraph",{9,3}},"Graph","UnitDistance"]//StyleGraphs

UnitDistance by refinement

UnitDistanceEmbeddingRefine[Graph[GraphData[{"C3GroupGraph",{9,3}},"VertexList"],GraphData[{"C3GroupGraph",{9,3}},"EdgeList"]],MaxIterations->500]

UnitDistanceEmbeddingRefine[Annotate[#,VertexCoordinates->N[GraphEmbedding[#]]],MaxIterations->500]&/@Complement@@(GraphData[{"C3GroupGraph",{9,3}},"Graph",#]&/@{"All","UnitDistance"})

UnitDistance by FindUnitDistanceEmbedding

FindUnitDistanceEmbedding[GraphData[{"C3GroupGraph",{9,3}}],MaxIterations->5000,"ReturnWithMessage"->True]//Timing

FindUnitDistanceEmbedding[GraphData[{"C3GroupGraph",{9,3}}],MaxIterations->5000,"ReturnWithMessage"->False]//Quiet//Timing

Matchstick

GraphData[{"C3GroupGraph",{9,3}},"Matchstick"]

GraphData[{"C3GroupGraph",{9,3}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"C3GroupGraph",{9,3}},"Edges"]]

3D construction

v={};
g=Graph[Range[Length[v]],UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

3D All

GraphData[{"C3GroupGraph",{9,3}},"Graph",{"3D","All"}]

3D UnitDistance

GraphData[{"C3GroupGraph",{9,3}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"C3GroupGraph",{9,3}},"Polyhedral"]

GraphData[{"C3GroupGraph",{9,3}},"Graph",{"3D","Polyhedron"}]

Graphics3D[{FaceForm[Green,Red],GraphData[{"C3GroupGraph",{9,3}},"Polyhedron"]}]

3D Canonical

GraphData[{"C3GroupGraph",{9,3}},"Graph",{"3D","Canonical"}]

Graphics3D[{Opacity[.5],Red,GraphData[{"C3GroupGraph",{9,3}},"Polyhedron","Canonical"],Yellow,Sphere[]}]

3D Canonical construction

Graphics3D[{FaceForm[Green,Red],poly=GraphPolyhedron[GraphData[{"C3GroupGraph",{9,3}}],-1]}]

(can=FindCanonicalPolyhedron[poly,WorkingPrecision->50,MaxIterations->50000,PrecisionGoal->20,"ProgressInterval"->1000,"TangentFactor"->1/10,"PlanarFactor"->1/10,Debug->True])//Timing

SimplePolyhedronQ[can]

Graphics3D[{Opacity[.5],Red,can,Yellow,Sphere[]}]

(lens=Mean/@Split[Sort[PolyhedronEdgeLengths[can]],Abs[#1-#2]<1.*^-10&])//N

v=PolyhedronCoordinates[can];

colors=With[{n=Length[lens]},Table[Hue[i/n],{i,0,n-1}]]

Graphics3D[{Thick,Sequence@@Nearest[Thread[lens->colors],EuclideanDistance@@v[[#]]],Line[v[[#]]]}&/@PolyhedronEdges[can],Boxed->False]

g=PolyhedronGraph[can]

{"C3GroupGraph", {9, 4}}

Names

GraphData[{"C3GroupGraph",{9,4}},"StandardName"]

GraphData[{"C3GroupGraph",{9,4}},"StandardNames"]

Primary

GraphData[{"C3GroupGraph",{9,4}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"C3GroupGraph",{9,4}},"Graph","All"]//StyleGraphs

Inexact

Select[GraphData[{"C3GroupGraph",{9,4}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Embedding types

GraphDataEmbeddings[GraphData[{"C3GroupGraph",{9,4}}]]

Default embedding

GraphPlot[Graph[GraphData[{"C3GroupGraph",{9,4}},"VertexList"],GraphData[{"C3GroupGraph",{9,4}},"Edges"],GraphLayout->"HighDimensionalEmbedding"]]

v=CirclePoints[3];
v=Join[v,#1+(#2-#1)2/3&@@@Partition[v,2,1,1],CirclePoints[{1/4,q},3]];

FullSimplify[RegionDistance[Line[v[[{2,6}]]],v[[7]]]^2,q>0]

Solve[(1/448) (30+13 Cos[2 q]+6 (Sqrt[3]) Cos[q] (-4+Sin[q])-8 Sin[q])==0,q,PositiveReals]//FullSimplify

N[%]

v=CirclePoints[3];
v=Join[v,#1+(#2-#1)2/3&@@@Partition[v,2,1,1],CirclePoints[{1/4,2 (ArcTan[(1/11) (14-5 (Sqrt[3]))])},3]];
g=Graph[Range@Length@v,UndirectedEdge@@@{e[1,4,2,5,3,6,1,9,5,4,7,9,6,4,8,3],{5,6},e[5,8,7,6],{7,2},{8,9}},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph@g

Degenerate

GraphData[{"C3GroupGraph",{9,4}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"C3GroupGraph",{9,4}},"Graph","Degenerate"]

Configuration

GetGraphData[{"C3GroupGraph",{9,4}},"File"]

GraphData[{"C3GroupGraph",{9,4}},"Configuration"]

GraphData[{"C3GroupGraph",{9,4}},"Graph","Configuration"]//StyleGraphs

Configuration...

config=%[[1]]

(alledges=AddAllConfigurationEdges[config])//Timing

RecognizeGraph@alledges

ConfigurationDiagram[config,.2]

lines=ConfigurationLines[config]

ConfigurationNotation[lines]

GraphData[{"C3GroupGraph",{9,4}},"IncidenceLines"]

levi=LeviGraph[lines]

RecognizeGraph[levi]

GraphData[{"C3GroupGraph",{9,4}},"LeviGraph","Name"]

FirstCase[GraphData[{"C3GroupGraph",{9,4}},"StandardNames"],{"Incidence",_}]

Cases[GraphData[{"C3GroupGraph",{9,4}},"StandardNames"],_String?(StringMatchQ[#,"*Configuration*"]&)]

GraphData[{"C3GroupGraph",{9,4}},"OrdinaryLineGraphName"]

(ordinarylinegraph=OrdinaryLineGraph[config])//Timing

RecognizeGraph@ordinarylinegraph

Incidence

GetGraphData[{"C3GroupGraph",{9,4}},"File"]

GraphData[{"C3GroupGraph",{9,4}},"Incidence"]

Select[GraphData[All],GraphData[#,"LeviGraph","Name"]==={"C3GroupGraph",{9,4}}&]

lines=GraphData[{"C3GroupGraph",{9,4}},"IncidenceLines"]

ConfigurationNotation[lines]

levi=LeviGraph[lines]

RecognizeGraph@levi

GeneralizedPetersen

GraphData[{"C3GroupGraph",{9,4}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"C3GroupGraph",{9,4}},"Graph","IGraph"]//StyleGraphs

Bilateral

GraphData[{"C3GroupGraph",{9,4}},"Graph","Bilateral"]//StyleGraphs

Grid[DeleteCases[Monitor[{g=#,BilateralGraphEmbeddingTypes[#],GraphSymmetryGroup[#]}&/@GraphData[{"C3GroupGraph",{9,4}},"Graph","All"],g],{_,_,TransformationGroup[{}]}],Dividers->All,Alignment->{{Center,{Left}}}]

Circular

GraphData[{"C3GroupGraph",{9,4}},"Graph","Circular"]//StyleGraphs

Circular construction

GraphData[{"C3GroupGraph",{9,4}},"Hamiltonian"]

GraphData[{"C3GroupGraph",{9,4}},"LCF"]

GraphData[{"C3GroupGraph",{9,4}},"HamiltonianCycleCount"]

Length[hc=FindHamiltonianCycle[GraphData[{"C3GroupGraph",{9,4}}],All][[All,All,1]]]//Timing

(circ=CircularEmbeddingFromHamiltonianCycle[GraphData[{"C3GroupGraph",{9,4}}],#]&/@hc);//Timing

graphswithsymmetrygroups={#,GraphSymmetryGroup[#]}&/@circ;//Timing

Tally[graphswithsymmetrygroups[[All,-1]]]//Column

(bilaterallyrotatedgraphs={BilaterallyRotatedGraph[#,"ReturnNonbilateralGraph"->True],#2}&@@@SortBy[
DeleteCases[graphswithsymmetrygroups,{_,TransformationGroup[{}]}],
{MatchQ[#[[2]],TransformationGroup[{_Rotation,r_Reflection}|{r_Reflection|_Rotation}]],FirstCase[#[[2]],Rotation[{0,0},r_]:>N[r/π],{},{0,∞}]}&
])//Timing

Length[symmetricgraphs=DeleteDuplicatesBy[bilaterallyrotatedgraphs,CircularCanonicalGraphEmbedding[#[[1]]]&]]//Timing

symmetricgraphs

gs=symmetricgraphs[[All,1]]

Planar

GraphData[{"C3GroupGraph",{9,4}},"Planar"]

GraphData[{"C3GroupGraph",{9,4}},"Graph","Planar"]//StyleGraphs

MinimalCrossing

GraphData[{"C3GroupGraph",{9,4}},{"RCN","CN"}]

GraphData[{"C3GroupGraph",{9,4}},"Graph","MinimalCrossing"]//StyleGraphs

MinimalCrossingNumber

(cn=CrossingNumber[GraphData[{"C3GroupGraph",{9,4}}],TimeConstraint->1])//AbsoluteTiming

(cn=CrossingNumber[GraphData[{"C3GroupGraph",{9,4}}],TimeConstraint->10])//AbsoluteTiming

(cn=CrossingNumber[GraphData[{"C3GroupGraph",{9,4}}],TimeConstraint->60])//AbsoluteTiming

(cn=CrossingNumber[GraphData[{"C3GroupGraph",{9,4}}],TimeConstraint->3600])//AbsoluteTiming

(cn=CrossingNumber[GraphData[{"C3GroupGraph",{9,4}}],TimeConstraint->5 3600])//AbsoluteTiming

(cn=CrossingNumber[GraphData[{"C3GroupGraph",{9,4}}],TimeConstraint->86400])//AbsoluteTiming

MinimalCrossing construction

(cn=CrossingNumber[GraphData[{"C3GroupGraph",{9,4}}],TimeConstraint->1])//AbsoluteTiming

(g=MinimalCrossingGraph[GraphData[{"C3GroupGraph",{9,4}}],"CrossingNumber"->cn])//PolyhedralGraphQ

faces=ReverseSort@SymmetricallyDistinctFaces[g]

Tally[ReverseSort[Length/@faces]]

gs=IGLayoutTutte[g,"OuterFace"->#]&/@faces

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData[{"C3GroupGraph",{9,4}},"V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

Select[gs,Max[OuterFace[#]]<=GraphData[{"C3GroupGraph",{9,4}},"V"]&]

(gs=Union[Select[Table[RotateGraph[MinimalCrossingGraph[GraphData[{"C3GroupGraph",{9,4}}],"CrossingNumber"->cn,RandomSeed->n]],{n,5000}],Max[OuterFace[#]]<=GraphData[{"C3GroupGraph",{9,4}},"V"]&]])//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData[{"C3GroupGraph",{9,4}},"V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

(gs=Table[MinimalCrossingGraph[GraphData[{"C3GroupGraph",{9,4}}],"CrossingNumber"->cn,RandomSeed->i],{i,5000}]//Union)//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData[{"C3GroupGraph",{9,4}},"V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

GraphPlot@

v={{-1,0},{1,0},{0,Sqrt[3]},{-1/2,1/4+1/16},{0,1/4+1/16},{1/2,1/4+1/16},{1/2,1/8+1/16+1/32},{0,1},{1/2,1/2}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[4,1,2,3,1,7,6,3,9,2,5,1,8,3,4,5,6,8,9],{5,8},{2,6},{2,7}},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

RectilinearCrossingCount[g]

RectilinearLocalCrossingCount[g]

MinimalLocalCrossing

GraphData[{"C3GroupGraph",{9,4}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"C3GroupGraph",{9,4}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"C3GroupGraph",{9,4}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"C3GroupGraph",{9,4}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

MinimaRectilinearlLocalCrossing construction

AdjacentCrossingsQ[g_Graph,cn_Integer]:=Module[{a=AdjacencyList[g],n=VertexCount[g]-cn},Max[Take[a,-cn]]>n]

(cn=CrossingNumber[GraphData[{"C3GroupGraph",{9,4}}],TimeConstraint->10])//AbsoluteTiming

(gs=Select[Table[MinimalCrossingGraph[GraphData[{"C3GroupGraph",{9,4}}],"CrossingNumber"->cn,RandomSeed->i],{i,20000}],!AdjacentCrossingsQ[#,cn]&]//Union)//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData[{"C3GroupGraph",{9,4}},"V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

(gs=Select[Table[MinimalCrossingGraph[GraphData[{"C3GroupGraph",{9,4}}],"CrossingNumber"->(cn=XXX),RandomSeed->i],{i,20000}],!AdjacentCrossingsQ[#,cn]&]//Union)//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData[{"C3GroupGraph",{9,4}},"V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

Circulant

GraphData[{"C3GroupGraph",{9,4}},"Circulant"]

GraphData[{"C3GroupGraph",{9,4}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"C3GroupGraph",{9,4}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"C3GroupGraph",{9,4}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"C3GroupGraph",{9,4}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"C3GroupGraph",{9,4}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"C3GroupGraph",{9,4}},"Line"]

LineGraphQ[GraphData[{"C3GroupGraph",{9,4}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"C3GroupGraph",{9,4}}&]

RootGraph[GraphData[{"C3GroupGraph",{9,4}}]]

RecognizeGraph[%]

Halin

GraphData[{"C3GroupGraph",{9,4}},"Halin"]

GraphData[{"C3GroupGraph",{9,4}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"C3GroupGraph",{9,4}},"Rigid"]

GraphData[{"C3GroupGraph",{9,4}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"C3GroupGraph",{9,4}},"Flexible"]

GraphData[{"C3GroupGraph",{9,4}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"C3GroupGraph",{9,4}},"LCF"]

GraphData[{"C3GroupGraph",{9,4}},"HamiltonianCycleCount"]

GraphData[{"C3GroupGraph",{9,4}},"LCFSignature"]

GraphData[{"C3GroupGraph",{9,4}},"LCFNotations"]

GraphData[{"C3GroupGraph",{9,4}},"Graph","LCF"]//StyleGraphs

Tally[LCFNotation[#][[2]]&/@%]

UnitDistance

GraphData[{"C3GroupGraph",{9,4}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"C3GroupGraph",{9,4}}],Debug->True]//Timing

GraphData[{"C3GroupGraph",{9,4}},"Graph","UnitDistance"]//StyleGraphs

UnitDistance by refinement

UnitDistanceEmbeddingRefine[Graph[GraphData[{"C3GroupGraph",{9,4}},"VertexList"],GraphData[{"C3GroupGraph",{9,4}},"EdgeList"]],MaxIterations->500]

UnitDistanceEmbeddingRefine[Annotate[#,VertexCoordinates->N[GraphEmbedding[#]]],MaxIterations->500]&/@Complement@@(GraphData[{"C3GroupGraph",{9,4}},"Graph",#]&/@{"All","UnitDistance"})

UnitDistance by FindUnitDistanceEmbedding

FindUnitDistanceEmbedding[GraphData[{"C3GroupGraph",{9,4}}],MaxIterations->5000,"ReturnWithMessage"->True]//Timing

FindUnitDistanceEmbedding[GraphData[{"C3GroupGraph",{9,4}}],MaxIterations->5000,"ReturnWithMessage"->False]//Quiet//Timing

Matchstick

GraphData[{"C3GroupGraph",{9,4}},"Matchstick"]

GraphData[{"C3GroupGraph",{9,4}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"C3GroupGraph",{9,4}},"Edges"]]

3D construction

v={};
g=Graph[Range[Length[v]],UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

3D All

GraphData[{"C3GroupGraph",{9,4}},"Graph",{"3D","All"}]

3D UnitDistance

GraphData[{"C3GroupGraph",{9,4}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"C3GroupGraph",{9,4}},"Polyhedral"]

GraphData[{"C3GroupGraph",{9,4}},"Graph",{"3D","Polyhedron"}]

"Square with tangled hats" graph

https://houseofgraphs.org/graphs/49350

Smallest C4 Graph

Smallest graph whose automorphism group is the cyclic group of order 4. (Source: Arlinghaus, The Classification of Minimal Graphs with Given Abelian Automorphism Group, Figure 4.8a)

https://mathematica.stackexchange.com/questions/310123/graph-layout-graph-embedding-challenge-for-minimal-graph-with-mathbbz-4-sy

The minimal simple, connected graph with ℤ4 symmetry, aka 'square with tangled hats' graph

That seems to be wrong; commented Jan 14, 2025

SquareWithtangledHats=ImportString["I?deLStUg","Graph6"]

GroupOrder[aut=GraphAutomorphismGroup[SquareWithtangledHats]]==4&&Length[GroupElements[aut]]==4

GraphIndex[SquareWithtangledHats]

Through[{VertexCount,EdgeCount}[]]

aut=GraphAutomorphismGroup[gSquareWithtangledHats

GroupOrder[aut]

CyclicGroupGraphQ[SquareWithtangledHats]

GraphData

GraphDataClassString

GraphDataClassString["CyclicGroup"]

GraphDataString

file=OpenWrite["~/smallest-cyclic.m"]

C3GroupGraphs9=If[PlanarGraphQ[#],PlanarGraph[#],#]&/@{,,,}

Do[WriteString[file,GraphDataString[C3GroupGraphs9[[i]],
"StandardName"->{"C3GroupGraph",{9,i}},
"AlternateStandardNames"->{{"Z3GroupGraph",{9,i}}},
"Name"->"C3 group graph (9,"<>ToString[i]<>")",
"AlternateNames"->{"Z3 group graph (9,"<>ToString[i]<>")"},
"Information"->"GraphAutomorphism",
"Skip"->{"ConstructionNumber","CyclicEdgeCuts","EdgeCuts","GracefulLabelings","Minors","QuadraticEmbeddingConstant"}
]],{i,3,4}]

Close[file]

file=OpenWrite["~/smallest-cyclic.m"]

C4GroupGraphs10=If[PlanarGraphQ[#],PlanarGraph[#],#]&/@{,,}

file=OpenWrite["~/smallest-cyclic.m"]

Do[WriteString[file,GraphDataString[C4GroupGraphs[[i]][[2]],
"StandardName"->{"C4GroupGraph",{10,i}},
"AlternateStandardNames"->{If[i==3,"SquareWithTangledHatsGraph",Nothing],{"Z4GroupGraph",{10,i}}},
"Name"->"C4 group graph (10,"<>ToString[i]<>")",
"AlternateNames"->{If[i==3,"square with tangled hats graph",Nothing],"Z4 group graph (10,"<>ToString[i]<>")"},
"Information"->"CyclicGroupGraph",
"Skip"->{"ConstructionNumber","CyclicEdgeCuts","EdgeCuts","ErdosSequence","GracefulLabelings","Minors","PinnacleSets","QuadraticEmbeddingConstant"}
]],{i,5,12}]

Close[file]