private static void FindRoutes(BidirectionalGraph <string, Edge <string> > graph, string from, string to) { var paths = graph .RankedShortestPathHoffmanPavley(GetEdgeWeight, from, to, 500) .Where(IsValidPath) .OrderByDescending(GetPathDuration); foreach (var path in paths) { Console.WriteLine(string.Join(", ", path)); } }
private IEnumerable <IEnumerable <Edge <int> > > GetPaths(int targetCompanyId) { const int PathMaxItemsCount = 15; var graph = new BidirectionalGraph <int, Edge <int> >(); foreach (var share in shares) { graph.AddVerticesAndEdge(new TaggedEdge <int, double>(share.OwnerProjectCompanyId, share.DependentProjectCompanyId, share.SharePart)); } return(graph.RankedShortestPathHoffmanPavley(e => 0, ownerCompany.Id, targetCompanyId, PathMaxItemsCount)); }
public List <List <string> > getkShortestPath(string startElem, string endElem, int k) { List <List <string> > vPaths = new List <List <string> >(); IEnumerable <IEnumerable <TaggedEdge <int, int> > > computedPaths = new List <List <TaggedEdge <int, int> > >(); try { Func <TaggedEdge <int, int>, double> edgeCost = e => 1; // constant cost if (ElemIDToNodeIDDict.ContainsKey(startElem)) { int startNode = ElemIDToNodeIDDict[startElem]; int endNode = ElemIDToNodeIDDict[endElem]; computedPaths = biDirGraph.RankedShortestPathHoffmanPavley(edgeCost, startNode, endNode, k); if (computedPaths.Count() > 0) { foreach (var path in computedPaths) { List <string> vPath = new List <string>(); foreach (var edge in path) { vPath.Add(edge.Source + " -> " + edge.Target + " : " + edge.Tag); } vPaths.Add(vPath); } } else { // can't find end node entry vPaths = null; } } else { // can't find start node entry vPaths = null; } } catch (SystemException e) { string excStr = "%%Error - " + e.Message + "\n\t"; refBimrlCommon.StackPushError(excStr); throw; } return(vPaths); }