Take the cube as an example, there are 8 nodes and 12 edges, and each node is connected with 3 nodes.
With networkx, I must input all the edges manually. For example, the following code is to construct a graph containing all the edges of an icosahedron (12 nodes, 30 edges, 5 adjacent nodes per node).
import networkx as nx
G = nx.Graph()
nodes = list(range(12))
edges = [
[0, 1], [0, 2], [0, 3], [0, 4], [0, 5],
[1, 2], [1, 6], [1, 10], [1, 5],
[2, 3], [2, 6], [2, 7],
[3, 4], [3, 7], [3, 8],
[4, 5], [4, 8], [4, 11],
[5, 11], [5, 10],
[6, 7], [6, 9], [6, 10],
[7, 8], [7, 9],
[8, 9], [8, 11],
[9, 10], [9, 11],
[10, 11],
]
G.add_nodes_from(nodes)
G.add_edges_from(edges)
My question is how to get all the possible edges without writing them manually. The name of every node can be randomly initialized.
To the best of my knowledge, the Erdős–Rényi model in igraph cannot constrain the adjacent nodes.
from igraph import *
g = Graph.Erdos_Renyi(12, m=30, directed=False)
g.get_edgelist()
"""
[(0, 1),
(0, 2),
(1, 3),
(2, 3),
(0, 4),
(1, 4),
(3, 5),
(4, 6),
(5, 6),
(0, 7),
(2, 7),
(3, 7),
(6, 7),
(0, 8),
(1, 8),
(3, 8),
(0, 9),
(3, 9),
(4, 9),
(6, 9),
(0, 10), node10 has more than 5 edges.
(2, 10),
(3, 10),
(5, 10),
(7, 10),
(8, 10),
(1, 11),
(2, 11),
(4, 11),
(9, 11)]
"""
You cannot create a unique planar graph only knowing the number of vertices, edges, and edges-per-vertex. A simple counter example:
Take your cube example with 8 vertices, 12 edges and 3 edges-per vertex then you can have:
This makes a planar graph with 6 faces where every face has 4 edges.
You can equally have:
This creates a planar graph with 4 triangular faces and 2 faces bounded by 6 edges.