作为我“回归基础”之旅的一部分,我正在研究这种方法,我要么缺少一些令人尴尬的东西,要么在这里不需要while
运算符:
// Return component identifier for component containing p
public int find(int p) {
while (p != id[p])
p = id[p];
return p;
}
完整来源为here。
看起来它可以像这样简单(并且整个功能毫无意义):
public int find(int p) {
return id[p];
}
答案 0 :(得分:3)
实际上不是。
它会将数组从指针移到指针,直到指针等于元素id。
示例:
id = [ 2 0 3 3 ]
然后,find(1)
会执行以下操作:
id[1] = 0 != 1
id[0] = 2 != 0
id[2] = 3 != 2
id[3] = 3 == 3 => return 3
答案 1 :(得分:2)
给定// id[i] = parent of i
,此循环找到最顶端的祖先,它被视为组件标识符。否则,普通id[p]
是p
的父级,并且您的语句仅对p
作为所述最顶级祖先的正确。
答案 2 :(得分:0)
private int [] id; // id [i] =我的父母
那是在desciption的顶部,所以id [p]与while循环不同