2016-04-02 41 views
1

我一直在努力完成我的任務,但我不知道如何創建一個鏈接列表與多個分支。我已經提取了我的數據,將其縮小並存儲在列表中。C#與多個分支的鏈接列表

List<Route> routes = new List<Route>(); 

路由包含兩個字符串變量:city1Namecity2Name

Route route = new Route("FirstCity", "SecondCity"); 

這意味着有FirstCitySecondCity之間的路由。每個城市可以有多條路線到其他城市。

有人可以告訴我如何將這些數據存儲在鏈表中嗎? 我明白什麼是鏈接列表,我想我可以使用foreach之後獲取多個可能的路由數據,但是我無法爲此編寫算法。 :(

+0

你正在尋找一個節點圖https://msdn.microsoft。 com/en-us/library/ms379574(v = vs.80).aspx – InferOn

+0

@Osvaldon在下面看到我的回答,我已經添加了一個片段以查找從一個城市到其他城市的可能路線。但是這並沒有找到最短路徑。在此處查看演示https://repl.it/CBgX/3 –

回答

4

您可以使用List<T>.Add追加T類型的任何物品,而T可以是任何.NET兼容的數據類型。在你的情況TRoute。所以,你可以添加,可以是隱式轉換爲Route

任何值
routes.Add(route); 

此外,在.NET中List<T>是不是一個鏈接列表。List<T> is implemented using Array internally。在.NET鏈接列表實現LinkList<T>

編輯

這裏是一個非常簡單的實現,以查找其他城市的路徑。

static bool TryFindPath(List<Route> routes, string from, string to, int maxDepth) { 

    if (maxDepth <= 0) // To prevent StackOverFlowException 
     return false; 

    // Find all the routes with starting point == `from` 
    var startingPoints = Routes.Where(r => r.From == from).ToArray(); 
    if (startingPoints.Length == 0) // No such route exists 
     return false; 

    // See if any of route directly leads to `to` 
    var matchingRoute = startingPoints.Where(r => r.To == to).FirstOrDefault(); 
    if (matchingRoute != null) { 
     routes.Add(matchingRoute); // If so, we found that 
     return true; 
    } 


    // We are stepping into next level, decrease maxDepth by one 
    maxDepth -= 1; 

    // Otherwise iterate through all starting points and find path from 
    // that specific city refered by to our destination 
    foreach (var route in startingPoints) { 

     // Clone `routes` 
     var thisRoutes = new List<Route>(routes); 
     thisRoutes.Add(route); 

     if (TryFindPath(thisRoutes, route.To, to, maxDepth)) { 

      // Copy all newly added routes in `thisRoutes` to original `routes` 
      for (var i = routes.Count; i < thisRoutes.Count; i++) { 
       routes.Add(thisRoutes[i]); 
      } 

      return true; 
     } 
    } 

    return false; 
} 

我假設Route類的定義如下

class Route { 

    public string From { get; set; } 
    public string To { get; set; } 

    public Route(string from, string to) { 
     From = from; 
     To = to; 
    } 
} 

你可以找到工作演示here

+0

我很感謝您所做的工作,我會爲您添加聲譽。但我真正需要的是從存儲在數組中的數據創建一個多路鏈表List routes = new List ();因爲這是分配的主要要求:(我將添加一個單向鏈表的樣子,或者我被告知的例子。 – Osvaldon

0
List<Route> routes = new List<Route>(); 
Route route = new Route("FirstCity", "SecondCity"); 
routes.Add(route); 

foreach (oneRoute in routes) 
{ 
    // The other work you're interested in doing 
    // oneRoute represents each single route one at a time. 
}