问题描述 输入一棵有向树的邻接矩阵,判断它是否为完全m元树,如果是,则输出“Y”和m值,否则输出“N”。 输入格式 输入有向树的邻接矩阵A 输出格式 如果是完全m元树,则输出“Y”和m值,并用空格隔开,否则输出“N”。 样例输入 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 样例输出 Y 2
时间: 2024-01-01 08:06:42 浏览: 178
这是一个比较典型的图论问题,需要对完全m元树的定义进行理解。完全m元树是一种有向树,每个节点的出度都为m,且每个非叶子节点的子节点数都为m。邻接矩阵表示的有向树可以通过数学公式进行判定。
我们假设邻接矩阵为A,节点总数为n,则完全m元树需要满足以下条件:
1. 对于所有的i和j,A[i][j]必须为0或1。
2. 对于所有的i,每一行的和必须为m或0,即每个节点的出度必须为m或0。
3. 对于所有的i和j,如果A[i][j]=1,则第i行的1的个数必须等于第j行1的个数,即每个非叶子节点的子节点数都为m。
根据以上条件,我们可以编写代码进行判断:
```python
n = int(input())
m = 0
for i in range(n):
row_sum = sum(map(int, input().split()))
if m == 0:
# 第一行
m = row_sum
elif m != row_sum:
# 出度不一致
print('N')
exit()
for j in range(n):
if i != j and ((A[i][j] == 1 and sum(map(int, A[j])) != m) or (A[i][j] == 0 and sum(map(int, A[j])) == m)):
# 子节点数不一致
print('N')
exit()
print('Y', m)
```
代码中,我们先读入节点总数n,然后依次读入每一行邻接矩阵,并按照上述条件进行判断。如果满足完全m元树的条件,则输出“Y”和m值,否则输出“N”。注意,如果在判断过程中发现不符合条件,可以直接输出“N”并结束程序,不需要继续判断。
阅读全文