/// <summary> /// currentNode-ból gyaloglással elérhető csomópontok és azok költsége (incompleteNodes-ból válogatva) /// </summary> /// <param name="currentNode"></param> /// <param name="incompleteNodes"></param> /// <param name="when"></param> /// <returns></returns> protected List <CompleteNode> GetTransferCandidates(CompleteNode currentNode, List <Node> incompleteNodes, DateTime when) { var candidates = new List <CompleteNode>(); if ((currentNode.usedEdges.Count > 0) && (currentNode.usedEdges.Peek() is TransferEdge)) { // Ha az előző művelet átszállás volt, akkor ne szálljunk át mégegyszer return(candidates); } int?groupId = GetStop(currentNode.stopId).GroupId; if (groupId != null) { var stopsInGroup = GetStopsInGroup(groupId); if (stopsInGroup == null) { // Ha árva vagyok, akkor üreset adok vissza return(candidates); } // Szomszédok vizsgálata foreach (var stop in stopsInGroup) { if (stop.DbId == currentNode.stopId) { // Saját magunkkal nem foglalkozunk continue; } if (!incompleteNodes.Exists(ic => ic.stopId == stop.DbId)) { // Csak akkor foglalkozzunk vele, ha még nem dolgoztuk fel continue; } var edge = new TransferEdge(stop.DbId, currentNode.departureTime, this.GetStop(currentNode.stopId), this.GetStop(stop.DbId)); var edgeCost = edge.GetCost(); if (edgeCost != null) { var usedEdges = new Stack <Edge>(currentNode.usedEdges.Reverse()); usedEdges.Push(edge); candidates.Add(new CompleteNode { stopId = stop.DbId, viaNode = currentNode, departureTime = currentNode.departureTime.Add(TimeSpan.FromMinutes((int)edgeCost)), usedEdges = usedEdges, usedRouteIds = new Stack <int>(currentNode.usedRouteIds.Reverse()) }); } } } return(candidates); }
/// <summary> /// currentNode-ból gyaloglással elérhető csomópontok és azok költsége (incompleteNodes-ból válogatva) /// </summary> /// <param name="currentNode"></param> /// <param name="incompleteNodes"></param> /// <param name="when"></param> /// <returns></returns> protected List<CompleteNode> GetTransferCandidates(CompleteNode currentNode, List<Node> incompleteNodes, DateTime when) { var candidates = new List<CompleteNode>(); if ((currentNode.usedEdges.Count > 0) && (currentNode.usedEdges.Peek() is TransferEdge)) { // Ha az előző művelet átszállás volt, akkor ne szálljunk át mégegyszer return candidates; } int? groupId = GetStop(currentNode.stopId).GroupId; if (groupId != null) { var stopsInGroup = GetStopsInGroup(groupId); if (stopsInGroup == null) { // Ha árva vagyok, akkor üreset adok vissza return candidates; } // Szomszédok vizsgálata foreach (var stop in stopsInGroup) { if (stop.DbId == currentNode.stopId) { // Saját magunkkal nem foglalkozunk continue; } if (!incompleteNodes.Exists(ic => ic.stopId == stop.DbId)) { // Csak akkor foglalkozzunk vele, ha még nem dolgoztuk fel continue; } var edge = new TransferEdge(stop.DbId, currentNode.departureTime, this.GetStop(currentNode.stopId), this.GetStop(stop.DbId)); var edgeCost = edge.GetCost(); if (edgeCost != null) { var usedEdges = new Stack<Edge>(currentNode.usedEdges.Reverse()); usedEdges.Push(edge); candidates.Add(new CompleteNode { stopId = stop.DbId, viaNode = currentNode, departureTime = currentNode.departureTime.Add(TimeSpan.FromMinutes((int)edgeCost)), usedEdges = usedEdges, usedRouteIds = new Stack<int>(currentNode.usedRouteIds.Reverse()) }); } } } return candidates; }