0

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)]
"""
akarui
  • 31
  • 3
  • I think the number of nodes and the degrees of each node is not sufficient to create a unique graph. – Code-Apprentice May 07 '21 at 03:06
  • @Code-Apprentice Thanks for your kindful comment. The relative number of nodes does not matter. In this case, can I construct a graph by the number of nodes and degrees of each node? For example, 4 nodes and degree=2 can construct a square, and degree=3 can construct a tetrahedron. – akarui May 07 '21 at 04:44

1 Answers1

0

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:

[
  (A,B),(B,C),(C,D),(D,A), # top face of the cube.
  (E,F),(F,G),(G,H),(H,E), # bottom face of the cube.
  (A,E),(B,F),(C,G),(D,H)  # sides of the cube connecting top and bottom.
]

This makes a planar graph with 6 faces where every face has 4 edges.

You can equally have:

[
  (A,B),(B,C),(C,D),(D,E),(E,F),(F,G),(G,H),(H,A), # cycle containing all vertices
  (A,C), # connect vertices 2 apart on the cycle.
  (B,D), # overlap previous and also connect vertices 2 apart on the cycle.
  (E,G), # connect vertices 2 apart on the cycle.
  (F,H)  # overlap previous and also connect vertices 2 apart on the cycle.
]

This creates a planar graph with 4 triangular faces and 2 faces bounded by 6 edges.

MT0
  • 143,790
  • 11
  • 59
  • 117