用C语言;输入一棵有向树的邻接矩阵A,A的大小为nxn,结点用1,2,......,n表示,第一个结点是根节点,再任意输入一个结点i(i是结点的序号),输出该结点的父结点,无父节点,输出null。 输入格式 第一行输入结点数n;第二行开始起输入n的平方个空格隔开的元素,表示邻接矩阵A;最后一行输入结点i。 输出格式 输出父节点,若无父节点,输出null。
时间: 2024-03-14 16:43:33 浏览: 21
好的,我会尽力回答你的问题。
以下是用C语言编写的解决方案:
```c
#include <stdio.h>
#define MAXN 100
int A[MAXN][MAXN]; // 邻接矩阵
int n; // 结点数
int main() {
// 输入邻接矩阵
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
scanf("%d", &A[i][j]);
}
}
// 输入目标结点
int target;
scanf("%d", &target);
// 寻找目标结点的父结点
int parent = -1; // 初始化为-1,表示没有找到父结点
for (int i = 1; i <= n; i++) {
if (A[i][target] == 1) { // 如果结点i是目标结点的父结点
parent = i; // 记录父结点的序号
break; // 找到了就跳出循环
}
}
// 输出结果
if (parent == -1) { // 没有找到父结点
printf("null\n");
} else {
printf("%d\n", parent);
}
return 0;
}
```
解释一下上面的代码:
首先,我们定义了一个二维数组 `A` 来保存邻接矩阵,还定义了一个变量 `n` 来表示结点数。
然后,我们通过循环读入邻接矩阵。
接下来,我们读入目标结点的序号。
然后,我们遍历每个结点,判断它是否是目标结点的父结点。如果是,我们记录下父结点的序号并跳出循环。
最后,我们根据是否找到父结点输出结果。
希望这个解决方案能够解决你的问题。