繁体   English   中英

Java while循环神秘迭代

[英]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; 
                } 
            } 
        } 

很难看出你没有掌握什么——它按照书面规定执行。

findi的某个值调用

parent数组中的第 i 个条目是否包含值i 是的,然后控制继续执行 return 语句,我们就完成了。

否则,将i中的值设置为“父”数组的第 i 个条目中的值。

parent数组中的第 i 个条目是否包含值i
是的,然后控制继续执行 return 语句,我们就完成了。

否则,将i中的值设置为“父”数组的第 i 个条目中的值。

......并继续这样做......

总体逻辑似乎是parent数组中的每个条目都应该标识其父条目,除了最上面的条目具有自己的父条目。

但是,由于parent中的所有条目都已初始化,因此第 i 个条目包含i ,并且没有任何更改,因此显示的代码似乎不完整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM