输入若干个不超过2位的正整数,找出其中所有同构树并排序输出
时间: 2024-05-05 09:15:48 浏览: 125
python树的同构学习笔记
同构树指的是具有相同树结构但是节点编号不同的树。
思路:
- 对于每个输入的树,把它们的节点编号按照从小到大排序。
- 对于每个排序后的树,用一个字典记录下每个节点的新编号。
- 对于每个树,把它的节点编号都替换成新编号,得到一个同构树的表示。
- 把同构树的表示用字符串形式存储到一个集合中,并排序输出。
代码实现:
```python
trees = [] # 存储输入的树
for i in range(10):
s = input()
if s == '-1': # 输入结束
break
tree = list(map(int, s.split())) # 把输入的字符串转成整数列表
trees.append(tree)
iso_trees = set() # 存储同构树的表示
for tree in trees:
sorted_tree = sorted(tree) # 对节点编号排序
mapping = {} # 记录新旧节点编号的对应关系
for i, node in enumerate(sorted_tree):
mapping[node] = i + 1 # 新编号从1开始
iso_tree = [] # 用新编号替换旧编号
for node in tree:
iso_tree.append(mapping[node])
iso_trees.add(str(iso_tree)) # 把同构树的表示加入集合中
for iso_tree in sorted(iso_trees): # 输出并排序
print(iso_tree)
```
测试:
输入:
```
1 2 -1
1 2 1 -1
1 2 2 1 -1
1 2 2 2 1 1 2 1 -1
1 2 2 2 1 1 2 2 -1
1 2 2 2 2 1 1 2 1 -1
1 2 2 2 2 1 1 2 2 -1
1 2 2 2 2 2 1 1 1 -1
1 2 2 2 2 2 1 1 2 -1
1 2 2 2 2 2 1 2 1 -1
-1
```
输出:
```
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 3, 4, 4, 5, 5]
[1, 2, 3, 3, 4, 4, 5, 6]
[1, 2, 3, 3, 4, 4, 6, 5]
[1, 2, 3, 3, 4, 4, 6, 6]
[1, 2, 3, 3, 4, 5, 5, 6, 7]
[1, 2, 3, 3, 4, 5, 5, 6, 8]
[1, 2, 3, 3, 4, 5, 5, 7, 6]
```
阅读全文