[英]Java while loop mysterious iteration
有人可以教我 find 方法中的 while 循环是如何工作的吗? 这是否会以某种方式自动将父数组从 0 迭代到端点? 直到 paren[i]?= i?
static int find(int i)
{
while (parent[i] != i)
i = parent[i];
return i;
}
// Finds MST using Kruskal's algorithm
static void kruskalMST(int cost[][])
{
int mincost = 0; // Cost of min MST.
// Initialize sets of disjoint sets.
for (int i = 0; i < V; i++)
parent[i] = i;
// Include minimum weight edges one by one
int edge_count = 0;
while (edge_count < V - 1)
{
int min = INF, a = -1, b = -1;
for (int i = 0; i < V; i++)
{
for (int j = 0; j < V; j++)
{
if (find(i) != find(j) && cost[i][j] != 0 && cost[i][j] < min)
{
min = cost[i][j];
a = i;
b = j;
}
}
}
很难看出你没有掌握什么——它按照书面规定执行。
find
以i
的某个值调用
parent
数组中的第 i 个条目是否包含值i
? 是的,然后控制继续执行 return 语句,我们就完成了。
否则,将i
中的值设置为“父”数组的第 i 个条目中的值。
parent
数组中的第 i 个条目是否包含值i
?
是的,然后控制继续执行 return 语句,我们就完成了。
否则,将i
中的值设置为“父”数组的第 i 个条目中的值。
......并继续这样做......
总体逻辑似乎是parent
数组中的每个条目都应该标识其父条目,除了最上面的条目具有自己的父条目。
但是,由于parent
中的所有条目都已初始化,因此第 i 个条目包含i
,并且没有任何更改,因此显示的代码似乎不完整。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.