簡體   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