import numpy as np import networkx as nx import argparse parser=argparse.ArgumentParser(description='') parser.add_argument('-g', '--graph', dest='graph', action='store', default=None) args=parser.parse_args() if not args.graph: print ("need a graph as input") exit() def read_graph(graph_file): with open(graph_file) as f: n=int(f.readline()) m=int(f.readline()) A=[[0]*n for _ in range(n)] for _ in range(m): [u,v]=map(int, f.readline().split()) A[u][v]=1 A[v][u]=1 G=nx.Graph(np.array(A)) return G def max_comp_size(G): return max([len(c) for c in nx.connected_components(G)]) del_list=[] G=read_graph(args.graph) n=len(G.nodes) while max_comp_size(G) > n/2: u=np.random.choice(G.nodes) if u not in del_list: del_list.append(u) G.remove_node(u) #print len(del_list), del_list for u in del_list: print (u)