Beispiel #1
0
        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));
        }
Beispiel #3
0
        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);
        }