# DFSを行い、スタックに追加 stack = [] visited = set() for v in G.nodes: if v notin visited: visited.add(v) stack.append(v) while stack: node = stack[-1] neighbors = list(G.neighbors(node)) unvisited = [n for n in neighbors if n notin visited] if unvisited: n = unvisited[0] visited.add(n) stack.append(n) else: stack.pop()
# スタックから頂点を逆順にして、転置グラフに対してDFSを行う visited = set() while stack: node = stack.pop() if node notin visited: visited.add(node) t_neighbors = list(GT.neighbors(node)) for n in t_neighbors: if n notin visited: stack.append(n)
# グラフを作成する G = nx.DiGraph() nodes = "ABCDE" for i inrange(len(nodes)): G.add_node(nodes[i]) if i < len(nodes) - 1: G.add_edge(nodes[i], nodes[i+1]) G.add_edge(nodes[-1], nodes[0])
# クラスタリング結果の表示 for i, c inenumerate(communities): print("Cluster ", i+1, ": ", c)
# クラスタリング結果をグラフに反映 color_map = [] for node in G: for i, c inenumerate(communities): if node in c: color_map.append(i) nx.draw(G, pos, node_color=color_map, with_labels=True) plt.show()