from igraph import * def network_height(net) : net.vs["height"] = [0]*len(net.vs) net.vs["visited"] = [False]*len(net.vs) Q = net.vs.select(_outdegree = 0).indices while (len(Q)>0) : j = Q[:1][0] Q = Q[1:] net.vs[j]["visited"] = True I = net.neighbors(j,"in") for i in I : net.vs[i]["height"] = max(net.vs[i]["height"],net.vs[j]["height"]+1) if all(net.vs.select(net.neighbors(i,"out"))["visited"]) : Q.append(i) print net.vs["height"] g = Graph([(0,1), (0,2), (1,4), (1,3), (2,3), (2,6), (3,5)], True) g.vs["name"]=["r","x","y","h","A","B","C"] network_height(g)