2014-04-27 49 views
0

在我的程序中,密度表示指示連接到特定節點的節點數的計數。例如,如果某個節點的密度爲3,則表示它已連接到無向圖中的其他3個節點。我想確定密度最高的節點。直到現在我做這樣的事情:在圖中找到密度最高的節點

public Node LeaderIs(List<Node> list) 
    { 
     for (int k = 0; k < list.Count; k++) 
     { 
      var i = YelloWPages.GetNode(k, list); 
      for (int l = 0; l < list.Count; l++) 
      { 
       var j = YelloWPages.GetNode(l, list); 
       if (Node.GetDensity(i) > Node.GetDensity(j)) 
       { 
        Node Leadernode = i; 
       } 
      } 
     } 
    } 

我有兩個問題:

  1. 如果這是正確的嗎?如果是的話,我應該從哪裏返回Leadernode?
  2. 如果不正確,我哪裏出錯了,可以做些什麼實現以獲得Leadernode

回答

0

回答您的問題:

1)不,這是不完全正確的,因爲你永遠不返回值,你不需要內部循環。你不想對列表排序,你只需要最大值。

2)你需要在你的方法頂部定義Leadernode,將其設置在測試狀態中,在方法

public Node LeaderIs(List<Node> list) 
{ 
    Node Leadernode = null; 
    int LeadernodeDensity = 0; 
    for (int k = 0; k < list.Count; k++) 
    { 
     var i = YelloWPages.GetNode(k, list); 
     int iDensity = Node.GetDensity(i); 
     if (iDensity > LeadernodeDensity) 
     { 
      Leadernode = i; 
      LeadernodeDensity = iDensity; 
     } 

    } 
    return Leadernode; 
} 

的最後返回看到它的答案類似的問題這裏是爲了更好地使用C#的最大值算法。

LINQ: How to perform .Max() on a property of all objects in a collection and return the object with maximum value

+0

這是給我的錯誤,在return語句說:「使用未分配的局部變量」。如何解決? – DotNetNewBie

+0

你需要默認它爲空(我已經更新了我的答案)。據推測,你總是會有一個密度大於零的節點,但是比對不起更安全。這也意味着無論什麼代碼調用這應該是檢查null。 –

+0

上述實施不起作用。但是,標記爲答案,因爲提供的鏈接中的LINQ實現似乎工作正常。 – DotNetNewBie

相關問題