Clarifications to support @mdml answer (All what is said here is to be referenced to the answer of @mdml)
1- Node keys using nx.grid_2d_graph
The keys given to nodes is done implicitly giving each node a key of (i,j) describing the row and column. To access a node at (0,0) -> G[(0,0)]
2- Labels used for drawing
The labels specified for drawing should be done as follows to abide by the numbering scheme in the question:
labels = dict( ((i, j), i + (N-1-j) * N ) for i, j in G.nodes() )
please notice it should be N not 10, so that it is more general as if you changed N the labels will not be the ones you expect. Also, these labels are only for drawing so they have nothing to do with accessing the node.
3- Linking keys to labels
accessing node -> G[(0,0)] refers to node 90 in the drawn graph (Lower left corner in general), G[(1,0)] is the node to the right (91), while G[(0,1)] is the node labelled (80) so take care of this convention because it might not be obvious.
4- To give nodes ID that is equivalent to the ones on the graph
You can use the labels dictionary to add an attribute called id to each node which holds the integer that you see in the drawn figure:
for (i,j) in labels:
G.node[(i,j)]['id'] = labels[(i,j)]
I created a simple graph with N=2, and I used the lines at points 2 and 3 and I printed out the Id's as follows:
for i in xrange(N):
for j in xrange(N):
print 'Node ID at: (%d, %d) = %d' %(i,j,G.node[(i,j)]['id'])
plt.axis('off')
plt.show()
Result:
Node ID at: (0, 0) = 2
Node ID at: (0, 1) = 0
Node ID at: (1, 0) = 3
Node ID at: (1, 1) = 1
