import re
import copy
#读取n和邻接表
with open('../examples/ros_bio32_TREE.txt') as f:
n = f.readline().rstrip()
file = f.readlines()
#将n转换为一个列表,邻接表通过正则转换为一个字典
nodes = [str(x) for x in range(1, int(n)+1)]
table = {}
for line in file:
line = re.sub(r'\n', '', line)
m = re.match(r'(\d+).?(\d+)', line)
name = m.group(1)
table[name] = m.group(2)
#result初始化为一个字典中的任意一个键值对,随后遍历字典,与result有相同结点则extend,无则append
#result记录有几个堆
result = [list(table.popitem())]
for k, v in table.items():
temp = [k, v]
comp = copy.deepcopy(result)
for i in result:
if k in i or v in i:
i.extend(temp)
if result == comp:
result.append(temp)
#去除result中的重复元素
new = []
for i in result:
new.append(list(set(i)))
#寻找result中没有的元素
single = []
for i in nodes:
num = 0
for j in new:
if i in j:
num += 1
if num == 0:
single.append(i)
length = len(new) + len(single)
print(length-1) # 最小可加入边即为堆总数减一
Rosalind第32题——ros_bio32_TREE
最新推荐文章于 2022-05-20 18:45:02 发布