[英]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.