halozatrombolas/destroy_p3.py

68 lines
1.7 KiB
Python
Raw Normal View History

2020-09-24 12:49:49 +02:00
import numpy as np
import networkx as nx
import argparse
2020-09-24 13:01:30 +02:00
parser = argparse.ArgumentParser(description='')
2020-09-24 12:49:49 +02:00
parser.add_argument('-g', '--graph', dest='graph', action='store', default=None)
2020-09-24 13:01:30 +02:00
args = parser.parse_args()
2020-09-24 12:49:49 +02:00
if not args.graph:
2020-09-24 13:01:30 +02:00
print("need a graph as input")
2020-09-24 12:49:49 +02:00
exit()
2020-09-24 13:01:30 +02:00
2020-09-24 12:49:49 +02:00
def read_graph(graph_file):
with open(graph_file) as f:
2020-09-24 15:52:07 +02:00
n = int(f.readline()) # pontok száma
m = int(f.readline()) # élek száma
A = [[0] * n for _ in range(n)] # táblázat, ahol az élek helyén 1 van, ammeg 0
2020-09-24 12:49:49 +02:00
for _ in range(m):
2020-09-24 13:01:30 +02:00
[u, v] = map(int, f.readline().split())
A[u][v] = 1
A[v][u] = 1
G = nx.Graph(np.array(A))
2020-09-24 12:49:49 +02:00
return G
2020-09-24 13:01:30 +02:00
2020-09-24 15:52:07 +02:00
input_graph = read_graph(args.graph)
2020-09-24 12:49:49 +02:00
def max_comp_size(G):
return max([len(c) for c in nx.connected_components(G)])
2020-09-24 13:01:30 +02:00
2020-09-24 15:52:07 +02:00
def run_random_once() -> list:
del_list = []
G = input_graph.copy()
target = len(G.nodes) / 2
while max_comp_size(G) > target:
u = np.random.choice(G.nodes)
if u not in del_list:
del_list.append(u)
G.remove_node(u)
return del_list
def remove_highest_kebab() -> list:
del_list = []
G = input_graph.copy()
target = len(G.nodes) / 2
while max_comp_size(G) > target:
highest_node = None
highest_node_deg = 0
for node in G.nodes:
if G.degree[node] > highest_node_deg:
highest_node = node
highest_node_deg = G.degree[node]
del_list.append(highest_node)
G.remove_node(highest_node)
return del_list
2020-09-24 12:49:49 +02:00
2020-09-24 15:52:07 +02:00
for kebab in remove_highest_kebab():
print(kebab)