// Use this for initialization void Start() { //利用LazyPrim算法计算稀疏有权图的最短路径 print("求稀疏有权图的最小生成树"); string name = ""; string url = ""; name = "testWeightG1.txt"; url = FileHelper.FileNameHelper(name); WeightSpareGraph <float> wsGraph = null; ReadWeightGraph.ReadGraphFromFile(url, out wsGraph, false); wsGraph.print(); LazyPrimMST lazyPrim = new LazyPrimMST(wsGraph); lazyPrim.print(); print("最小生成树的长度为:" + lazyPrim.length()); print("使用深度优先搜索的方法得到一棵生成树"); lazyPrim = new LazyPrimMST(wsGraph, true); lazyPrim.printOneTree(); print("*********************"); //利用Prim算法计算稀疏有权图的最短路径 PrimMST prim = new PrimMST(wsGraph); prim.print(); }
void Start() { EdgeWeightedGraph G = new EdgeWeightedGraph(txt, ' '); PrimMST mst = new PrimMST(G); foreach (Edge e in mst.Edges()) { print(e); } print(mst.weight()); }
public void TestPrimMST() { PrimMST mst = graph.PrimMST(); Edge[] edges = mst.Edges(); foreach (Edge edge in edges) { // TestContext.WriteLine(edge.ToString()); } TestContext.WriteLine(mst.Weight().ToString()); }
public void TestPrimMST() { string fileName = @"Graph\testG1.txt"; var g1 = new SparseGraph <double>(8, false); var gr1 = new ReadGraph <double>(g1, fileName); g1.Show(); // test prim Console.WriteLine("Test Prim MST: "); var primMST = new PrimMST <double>(g1); var mst = primMST.MSTEdges; foreach (var edge in mst) { Console.WriteLine(edge); } Console.WriteLine("The MST weight is: " + primMST.MSTWeight); }
void MinTreeTest() { EdgeWeightedGraph g = new EdgeWeightedGraph(5); g.AddEdge(new Edge(0, 1, 1)); g.AddEdge(new Edge(1, 2, 2)); g.AddEdge(new Edge(1, 3, 6)); g.AddEdge(new Edge(2, 4, 4)); g.AddEdge(new Edge(3, 4, 5)); LazyPrimMST mst = new LazyPrimMST(g); //Debug.Log("延迟:" + mst.Weight()); PrimMST primMst = new PrimMST(g); //Debug.Log("即时:" + primMst.Weight()); KruskalMST kruskalMst = new KruskalMST(g); Debug.Log(kruskalMst.Weight()); }
public void SolveTest() { string[] lines = File.ReadAllLines("MSTTestGraph.txt"); int n = int.Parse(lines[0].Split(' ')[0]); int m = int.Parse(lines[0].Split(' ')[1]); int mstCost = int.Parse(lines[lines.Length - 1]); UndirectedGraph undirectedGraph = new UndirectedGraph(new WeightedMatrixRepresentation(n)); for (int i = 0; i < m; i++) { string[] tokens = lines[i + 1].Split(' '); int from = int.Parse(tokens[0]); int to = int.Parse(tokens[1]); double cost = double.Parse(tokens[2]); undirectedGraph.AddEdge(new Edge(from, to, cost)); } PrimMST primMST = new PrimMST(); undirectedGraph.MSTSolver = primMST; var mst = undirectedGraph.GetMinimumSpanningTree(); if (mst.Count != n - 1) { Assert.Fail(); } int totalCost = 0; foreach (Edge baseEdge in mst) { totalCost += (int)baseEdge.Cost; } if (totalCost != mstCost) { Assert.Fail(); } }
static void Main(string[] args) { // 使用两种图的储存方式来读取文件 string fileName = "TextG1.txt"; SparseGraph graph = new SparseGraph(13, false); ReadGraph readGraph = new ReadGraph(graph, fileName); Console.WriteLine("test g1 in sparse graph "); graph.Show(); Console.WriteLine(); DenseGraph graph1 = new DenseGraph(13, false); ReadGraph readGraph1 = new ReadGraph(graph1, fileName); Console.WriteLine("test g1 in dense graph "); graph1.Show(); Console.WriteLine("==========================================="); DenseGraph graph2 = new DenseGraph(13, false); ReadGraph readGraph2 = new ReadGraph(graph2, fileName); Path path = new Path(graph2, 0); Console.WriteLine("test path g1 in dense graph "); path.ShowPath(4); Console.WriteLine("==========================================="); WeightedDenseGraph <double> wgraph3 = new WeightedDenseGraph <double>(8, false); ReadWeightedGraph readGraph3 = new ReadWeightedGraph(wgraph3, "testG1.txt"); Console.WriteLine("test in weighted dense graph "); wgraph3.Show(); Console.WriteLine("==========================================="); SparseWeightedGraph <double> wgraph4 = new SparseWeightedGraph <double>(8, false); ReadWeightedGraph readGraph4 = new ReadWeightedGraph(wgraph4, "testG1.txt"); Console.WriteLine("test in weighted sparse graph "); wgraph4.Show(); Console.WriteLine("Test MinHeap"); int n = 100000; MinHeap <int> heap = new MinHeap <int>(n); Random rand = new Random(); for (int i = 0; i < n; i++) { heap.Add(rand.Next(n)); } List <int> list = new List <int>(); for (int i = 0; i < n; i++) { list.Add(heap.ExtractMin()); } for (int i = 0; i < n - 1; i++) { if (list[i] > list[i + 1]) { throw new Exception("MinHeap error"); } } Console.WriteLine("==========================================="); Console.WriteLine("Test MST"); SparseWeightedGraph <double> wgraph5 = new SparseWeightedGraph <double>(8, false); ReadWeightedGraph readGraph5 = new ReadWeightedGraph(wgraph5, "testG1.txt"); LazyPrimeMST <double> mst = new LazyPrimeMST <double>(wgraph5); List <Edge <double> > mstPath = mst.MstEdges(); for (int i = 0; i < mstPath.Count; i++) { Console.WriteLine(mstPath[i]); } Console.WriteLine("Test Index MinHeap"); IndexMinHeap <int> heap1 = new IndexMinHeap <int>(n); for (int i = 0; i < n; i++) { heap1.Add(i, rand.Next(n)); } for (int i = 0; i < n / 2; i++) { heap1.Update(i, rand.Next(n)); } List <int> list1 = new List <int>(); for (int i = 0; i < n; i++) { list1.Add(heap1.ExtractMin()); } for (int i = 0; i < n - 1; i++) { if (list1[i] > list1[i + 1]) { throw new Exception("IndexMinHeap error"); } } Console.WriteLine("==========================================="); Console.WriteLine("Test MST Optimization"); SparseWeightedGraph <double> wgraph6 = new SparseWeightedGraph <double>(8, false); ReadWeightedGraph readGraph6 = new ReadWeightedGraph(wgraph6, "testG1.txt"); PrimMST <double> mst1 = new PrimMST <double>(wgraph6); List <Edge <double> > mstPath1 = mst1.MstEdges(); for (int i = 0; i < mstPath1.Count; i++) { Console.WriteLine(mstPath1[i]); } }
public void Run() { Console.WriteLine("Choose file:"); // Prompt Console.WriteLine("1 - tinyEWG.txt"); // Prompt Console.WriteLine("2 - mediumEWG.txt"); // Prompt //Console.WriteLine("3 - mediumEWG.txt"); // Prompt Console.WriteLine("or quit"); // Prompt var fileNumber = Console.ReadLine(); string fileName; switch (fileNumber) { case "1": fileName = "tinyEWG.txt"; break; case "2": fileName = "mediumEWG.txt"; break; //case "3": // fileName = "largeEWG.zip"; // break; case "quit": return; default: return; } var @in = new In($"Files\\Graphs\\{fileName}"); var lines = @in.ReadAllLines(); var lineIterator = 0; var v = 0; var e = 0; var edges = new List <EdgeW>(); foreach (var line in lines) { if (lineIterator == 0) { v = Convert.ToInt32(line); } if (lineIterator == 1) { e = Convert.ToInt32(line); } if (lineIterator > 1) { var lineSplitted = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var ve = Convert.ToInt32(lineSplitted[0]); var we = Convert.ToInt32(lineSplitted[1]); var weight = Convert.ToDouble(lineSplitted[2], CultureInfo.InvariantCulture); var edge = new EdgeW(ve, we, weight); edges.Add(edge); } lineIterator++; } var edgeWeightedGraph = new EdgeWeightedGraph(v, e, edges); Console.WriteLine(edgeWeightedGraph); var mst = new PrimMST(edgeWeightedGraph); foreach (var edge in mst.Edges()) { Console.WriteLine(edge); } Console.Write($"{$"{mst.Weight():0.00000}"}{Environment.NewLine}"); Console.ReadLine(); }