Esempio n. 1
0
    // 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();
    }
Esempio n. 2
0
    void Start()
    {
        EdgeWeightedGraph G   = new EdgeWeightedGraph(txt, ' ');
        PrimMST           mst = new PrimMST(G);

        foreach (Edge e in mst.Edges())
        {
            print(e);
        }
        print(mst.weight());
    }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
    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());
    }
Esempio n. 6
0
        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]);
            }
        }
Esempio n. 8
0
        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();
        }