public double Run() { var vertices = _graph.Vertices(); var enumerable = vertices as int[] ?? vertices.ToArray(); foreach (var vertex in enumerable) { var dijkstra = new Dijkstra(_graph); dijkstra.Run(vertex); foreach (var v in enumerable) { if (v != vertex) if(!double.IsPositiveInfinity(dijkstra.DistanceTo(v))) _distanceSum += dijkstra.DistanceTo(v); } } return _distanceSum/(_graph.VerticesCount*(_graph.VerticesCount - 1)); }
public double Run() { var vertices = _graph.Vertices(); var enumerable = vertices as int[] ?? vertices.ToArray(); foreach (var vertex in enumerable) { var dijkstra = new Dijkstra(_graph); dijkstra.Run(vertex); foreach (var v in enumerable) { if (v != vertex) { if (!double.IsPositiveInfinity(dijkstra.DistanceTo(v))) { _distanceSum += dijkstra.DistanceTo(v); } } } } return(_distanceSum / (_graph.VerticesCount * (_graph.VerticesCount - 1))); }
private static void Main(string[] args) { var g = new AdjacencyListGraph(true); try { // TextReader fin = new StreamReader( args[0] ); Console.WriteLine("Choose file"); var file = Console.ReadLine(); //TextReader fin = new StreamReader($"c:\\Grafos\\grafo_{file}.txt"); TextReader fin = new StreamReader($"c:\\Grafos\\rede_colaboracao.txt"); Console.WriteLine($"Reading file {file}..."); var counter = 1; string line; while ((line = fin.ReadLine()) != null) { var st = line.Split(); try { if (counter == 1) { g.VerticesCount = int.Parse(line); } else { if (st.Length != 3) { Console.Error.WriteLine("Skipping ill-formatted line " + line); continue; } var source = int.Parse(st[0]); var dest = int.Parse(st[1]); CultureInfo culture = new CultureInfo("en"); var cost = double.Parse(st[2], culture); g.AddEdge(source, dest, cost); } } catch (FormatException) { Console.Error.WriteLine("Skipping ill-formatted line " + line); } finally { counter++;} } } catch (IOException e) { Console.Error.WriteLine(e); } Console.WriteLine("File read..."); Console.WriteLine(g.VerticesCount + " vertices"); var sw = new Stopwatch(); sw.Start(); //run dijkstra //Console.WriteLine("Run Dijkstra"); //var d = new Dijkstra(g); //d.Run(40); //sw.Stop(); //Console.WriteLine("End"); //Console.WriteLine($"Distance to vertex 1: {d.DistanceTo(1)}"); //Console.WriteLine("Run Prim"); //var p = new Prim(g); //sw.Stop(); //Console.WriteLine($"MST weight: {p.Weight()}"); //Console.WriteLine("Calc " + DateTime.Now.ToString("O")); //var avg = new AveragePathLength(g).Run(); //Console.WriteLine("Average Path Length: {0}", avg); //sw.Stop(); //Console.WriteLine("Done " + DateTime.Now.ToString("O")); var d = new Dijkstra(g); d.Run(2722); //sw.Stop(); //Console.WriteLine("End"); //Console.WriteLine($"Distance to turing: {d.DistanceTo(11365)}"); //Console.WriteLine($"Distance to kruskal: {d.DistanceTo(211706)}"); //Console.WriteLine($"Distance to kleinberg: {d.DistanceTo(5709)}"); //Console.WriteLine($"Distance to tardos: {d.DistanceTo(11386)}"); //Console.WriteLine($"Distance to daniel: {d.DistanceTo(343930)}"); var pathToDaniel = d.PathTo(11386); if (pathToDaniel == null) { Console.WriteLine("indefinito"); return; } foreach (var edge in pathToDaniel) { Console.WriteLine(edge); } //Console.WriteLine("Run Prim"); //var p = new Prim(g); //sw.Stop(); //Console.WriteLine($"MST weight: {p.Weight()}"); //var mstEdges = p.Edges(); //var mst = new AdjacencyListGraph(true); //foreach (var mstEdge in mstEdges) //{ // mst.AddEdge(mstEdge.Source, mstEdge.Target, mstEdge.Weight); //} //var degrees = mst.Degrees(); //var d = degrees.Values.OrderByDescending(a => a).ToList(); //var first = degrees.Where(e => e.Value == d[0]); //var second = degrees.Where(e => e.Value == d[1]); //var third = degrees.Where(e => e.Value == d[2]); //Console.WriteLine($"Degree 1: {first.FirstOrDefault().Key} {d[0]}"); //Console.WriteLine($"Degree 2: {second.FirstOrDefault().Key} {d[1]}"); //Console.WriteLine($"Degree 3: {third.FirstOrDefault().Key} {d[2]}"); //Console.WriteLine( // $"Dijkstra neighbours: {mst.Neighbours(2722).Aggregate("", (current, neighbour) => current + (neighbour + " - "))}"); //Console.WriteLine( // $"Figueiredo neighbours: {mst.Neighbours(343930).Aggregate("", (current, neighbour) => current + (neighbour + " - "))}"); Console.WriteLine("Elapsed={0}", sw.Elapsed.TotalMilliseconds); Console.ReadLine(); }