【发布时间】:2019-11-18 05:04:55
【问题描述】:
所以我有一个二维布尔数组 a,它应该代表不同人之间的关系/友谊。每个人都是通过他们的 id(数组的索引)来识别的,如果值a[1][0] 为真,则人 1 和 0 是朋友。如果 2 人是朋友,他们的“朋友距离”为 1。人们也可以通过其他人成为朋友,例如如果 a[1][0] = true, a[2][0] = true, a[2][1] = false,那么人 1 和 2 不是直接朋友,而是因为人 1 是人 0 的朋友,并且人 0 是人 2 的朋友,人 1 和人 2 是距离 2 的朋友。现在我想递归地确定,如果 2 人是给定距离内的朋友,或者他们不是。我已经写了这段代码:
public static boolean areFriends(int id0, int id1, int e) {
if (e <= 0) {
return false;
}
if (array[id0][id1]) {
return true;
}
for (int i = 0; i < array.length; i++) {
if (array[id0][i]){
(areFriends(i, id1, --e);
}
}
return false;
}
}
代码至少应该做的是遍历 id0s 好友列表,并检查每个数组条目,如果 id0 和被检查的人 idx 是好友。如果是,则重复该方法,用 idx 替换 id0s 位置,以及 --e。因此,再次检查所有 idxs 关系,如果 idx 是另一个人的朋友,则整个循环会重复,直到“朋友距离”e 太高(因此不存在间接友谊)或找到间接友谊。
但显然这段代码并没有完全做到这一点,所以我会为我做错了什么或如何解决我的错误提供任何提示。
【问题讨论】: