Пример #1
0
        public static PathStats ShortestPath(DirectedGraph g, int s)
        {
            #region Initialization
            var stats = new PathStats(g.V);
            for (var i = 0; i < stats.Dist.Length; i++)
            {
                stats.Dist[i] = int.MaxValue;
                stats.Prev[i] = -1;
            }
            stats.Dist[s] = 0;
            #endregion

            var dfsStats = Dfs.DepthFirstSearch(g);
            var linearization = dfsStats.Linearization;
            Debug.WriteLine(dfsStats);
            foreach (var u in linearization)
            {
                foreach (var v in g.Adjacent(u))
                {
                    if (stats.Dist[v.V2] > stats.Dist[v.V1] + v.Weight)
                    {
                        stats.Dist[v.V2] = stats.Dist[v.V1] + v.Weight;
                        stats.Prev[v.V2] = u;
                    }
                }
            }

            return stats;
        }