Ejemplo n.º 1
0
        public void IsolatedGraph(bool value)
        {
            Graph graph = new MatrixGraph(10, true);

            graph.AddEdge(0, 9, 10);
            graph.AddEdge(2, 0, 5);
            Graph isolatedGraph = graph.IsolatedGraph(value);

            Assert.Equal(10, isolatedGraph.VerticesCount);
            Assert.Equal(value, isolatedGraph.Directed);
            Assert.Equal(0, isolatedGraph.EdgesCount);
        }
Ejemplo n.º 2
0
        public void ReverseGraph()
        {
            Graph graph = new MatrixGraph(10, true);

            graph.AddEdge(0, 9, 10);
            graph.AddEdge(2, 0, 5);
            Graph reversedGraph = graph.ReversedGraph();

            Assert.Equal(1, reversedGraph.GetOutDegree(9));
            Assert.Equal(1, reversedGraph.GetInDegree(2));
            Assert.Equal(2, reversedGraph.EdgesCount);
        }
Ejemplo n.º 3
0
        public void GraphOfSameType(bool value)
        {
            Graph graph = new MatrixGraph(10, true);

            graph.AddEdge(0, 9, 10);
            graph.AddEdge(2, 0, 5);
            Graph sameTypeGraph = graph.NewGraphOfSameType(5, value);

            Assert.Equal(5, sameTypeGraph.VerticesCount);
            Assert.Equal(value, sameTypeGraph.Directed);
            Assert.Equal(0, sameTypeGraph.EdgesCount);
            Assert.IsType <MatrixGraph>(sameTypeGraph);
        }
Ejemplo n.º 4
0
        public void UndirectedGraphAddEdgeAndDeleteEdge()
        {
            Graph graph = new MatrixGraph(10, false);

            graph.AddEdge(0, 9, 10);
            graph.AddEdge(2, 0, 5);
            Assert.Equal(2, graph.GetOutDegree(0));
            Assert.Equal(2, graph.GetInDegree(0));
            Assert.Equal(2, graph.EdgesCount);
            graph.DeleteEdge(0, 9);
            Assert.Equal(1, graph.GetOutDegree(0));
            Assert.Equal(1, graph.GetInDegree(0));
            Assert.Equal(1, graph.EdgesCount);
        }
Ejemplo n.º 5
0
        public void TestDirected()
        {
            var graph = new MatrixGraph(GraphTypes.Directed, 6);

            graph.AddEdge(0, 1);
            graph.AddEdge(0, 4);
            graph.AddEdge(1, 2);
            graph.AddEdge(2, 0);
            graph.AddEdge(2, 3);
            graph.AddEdge(3, 1);
            graph.AddEdge(3, 4);
            graph.AddEdge(3, 5);
            graph.AddEdge(4, 1);
            graph.AddEdge(5, 0);

            var print = graph.PrintBFS(3);
        }
Ejemplo n.º 6
0
        public void TestUndirected()
        {
            var graph = new MatrixGraph(GraphTypes.Undirected, 5);

            graph.AddEdge(0, 1);
            graph.AddEdge(0, 4);

            graph.AddEdge(1, 4);
            graph.AddEdge(1, 3);
            graph.AddEdge(1, 2);

            graph.AddEdge(2, 3);
            graph.AddEdge(3, 4);

            var print = graph.PrintBFS(3);
        }
Ejemplo n.º 7
0
        private void addEdgeButton_Click(object sender, EventArgs e)
        {
            if (edgeFrom.Value == edgeTo.Value)
            {
                return;
            }
            string newItem     = edgeFrom.Value.ToString() + "<------>" + edgeTo.Value.ToString();
            string reverseItem = edgeTo.Value.ToString() + "<------>" + edgeFrom.Value.ToString();

            if (!listOfEgdes.Items.Contains(newItem) && !listOfEgdes.Items.Contains(reverseItem))
            {
                listOfEgdes.Items.Add(newItem);
                if (graph == null)
                {
                    graph = new MatrixGraph((uint)numberOfVertices.Value);
                }
                graph.AddEdge(new Edge((int)edgeFrom.Value, (int)edgeTo.Value));
            }
        }
Ejemplo n.º 8
0
        private void uploadGraphButton_Click(object sender, EventArgs e)
        {
            clearAllAndCreateNewGraph(true);

            OpenFileDialog theDialog = new OpenFileDialog
            {
                Title            = @"Open Text File",
                Filter           = @"TXT files|*.txt",
                InitialDirectory = Directory.GetCurrentDirectory(),
                RestoreDirectory = true
            };

            if (theDialog.ShowDialog() == DialogResult.OK)
            {
                string filename      = theDialog.FileName;
                int    numOfVertices = 0;
                int[,] edges = null;

                try
                {
                    numOfVertices = new Parser().Parse(filename, out edges);
                }
                catch (Exception)
                {
                    MessageBox.Show("Wrong file format!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    graph = null;
                    return;
                }

                //graph construction
                graph = new MatrixGraph((uint)numOfVertices);
                numberOfVertices.Value = numOfVertices;
                for (int i = 0; i < edges.GetLength(0); i++)
                {
                    graph.AddEdge(new Edge(edges[i, 0], edges[i, 1]));
                    listOfEgdes.Items.Add("" + edges[i, 0].ToString() + "<------>" + edges[i, 1].ToString());
                }
            }
        }
Ejemplo n.º 9
0
        public void FloydWarshallTest(bool directed)
        {
            Graph g = new MatrixGraph(7, directed);

            g.AddEdge(0, 1, 5);
            g.AddEdge(0, 2, 3);
            g.AddEdge(0, 3, 0);
            g.AddEdge(1, 4, 3);
            g.AddEdge(1, 6, 4);
            g.AddEdge(2, 4, 2);
            g.AddEdge(2, 5, 1);
            g.AddEdge(3, 2, 2);
            g.AddEdge(3, 6, 15);
            g.AddEdge(4, 6, 3);
            g.AddEdge(5, 4, 12);
            var result = g.Johnson();

            for (int i = 0; i < g.VerticesCount; i++)
            {
                Assert.Equal(0, result[i][i]);
            }

            Assert.Equal(5, result[0][1]);
            Assert.Equal(2, result[0][2]);
            Assert.Equal(0, result[0][3]);
            Assert.Equal(4, result[0][4]);
            Assert.Equal(3, result[0][5]);
            Assert.Equal(7, result[0][6]);

            Assert.Equal(double.MaxValue, result[2][0]);
            Assert.Equal(double.MaxValue, result[2][1]);
            Assert.Equal(double.MaxValue, result[2][3]);
            Assert.Equal(2, result[2][4]);
            Assert.Equal(1, result[2][5]);
            Assert.Equal(5, result[2][6]);

            Assert.Equal(double.MaxValue, result[2][0]);
            Assert.Equal(double.MaxValue, result[2][1]);
            Assert.Equal(double.MaxValue, result[2][3]);
            Assert.Equal(2, result[2][4]);
            Assert.Equal(1, result[2][5]);
            Assert.Equal(5, result[2][6]);

            Assert.Equal(double.MaxValue, result[3][0]);
            Assert.Equal(double.MaxValue, result[3][1]);
            Assert.Equal(2, result[3][2]);
            Assert.Equal(4, result[3][4]);
            Assert.Equal(3, result[3][5]);
            Assert.Equal(7, result[3][6]);

            Assert.Equal(double.MaxValue, result[4][0]);
            Assert.Equal(double.MaxValue, result[4][1]);
            Assert.Equal(double.MaxValue, result[4][2]);
            Assert.Equal(double.MaxValue, result[4][3]);
            Assert.Equal(double.MaxValue, result[4][5]);
            Assert.Equal(3, result[4][6]);

            Assert.Equal(double.MaxValue, result[5][0]);
            Assert.Equal(double.MaxValue, result[5][1]);
            Assert.Equal(double.MaxValue, result[5][2]);
            Assert.Equal(double.MaxValue, result[5][3]);
            Assert.Equal(12, result[5][4]);
            Assert.Equal(15, result[5][6]);

            Assert.Equal(double.MaxValue, result[6][0]);
            Assert.Equal(double.MaxValue, result[6][1]);
            Assert.Equal(double.MaxValue, result[6][2]);
            Assert.Equal(double.MaxValue, result[6][3]);
            Assert.Equal(double.MaxValue, result[6][4]);
            Assert.Equal(double.MaxValue, result[6][5]);
        }
        public void SimpleKrusalTest()
        {
            Graph g = new MatrixGraph(7, false);

            g.AddEdge(0, 1, 5);
            g.AddEdge(0, 2, 3);
            g.AddEdge(0, 3, 0);
            g.AddEdge(1, 4, 3);
            g.AddEdge(1, 6, 4);
            g.AddEdge(2, 4, 2);
            g.AddEdge(2, 5, 1);
            g.AddEdge(3, 2, 2);
            g.AddEdge(3, 6, 15);
            g.AddEdge(4, 6, 3);
            g.AddEdge(5, 4, 12);
            var result = g.Kruskal();

            Assert.True(result.connected);
            Assert.Equal(0, result.tree.GetEdge(0, 3).Weight);
            Assert.Equal(2, result.tree.GetEdge(3, 2).Weight);
            Assert.Equal(1, result.tree.GetEdge(2, 5).Weight);
            Assert.Equal(2, result.tree.GetEdge(2, 4).Weight);
            Assert.Equal(3, result.tree.GetEdge(1, 4).Weight);
            Assert.Equal(3, result.tree.GetEdge(4, 6).Weight);
            Assert.Equal(6, result.tree.EdgesCount);
        }
Ejemplo n.º 11
0
        public void SimpleDFSTest(bool value)
        {
            Random random = new Random();
            Graph  g      = new MatrixGraph(9, value);

            g.AddEdge(0, 1, random.NextDouble());
            g.AddEdge(0, 2, random.NextDouble());
            g.AddEdge(0, 3, random.NextDouble());
            g.AddEdge(1, 4, random.NextDouble());
            g.AddEdge(1, 6, random.NextDouble());
            g.AddEdge(2, 4, random.NextDouble());
            g.AddEdge(2, 5, random.NextDouble());
            g.AddEdge(3, 7, random.NextDouble());
            g.AddEdge(4, 7, random.NextDouble());
            g.AddEdge(6, 7, random.NextDouble());
            g.AddEdge(5, 8, random.NextDouble());

            bool[] tab;
            g.DFS(null, null, null, 0, out tab);
            foreach (bool b in tab)
            {
                Assert.True(b);
            }

            bool[] invTab;
            Graph  invGraph = g.ReversedGraph();

            invGraph.DFS(null, null, null, 0, out invTab);
            Assert.True(invTab[0]);
            for (int i = 1; i < invTab.Length; i++)
            {
                Assert.Equal(!value, invTab[i]);
            }
        }
Ejemplo n.º 12
0
        public void TestDirected_DFS()
        {
            var graph = new MatrixGraph(GraphTypes.Directed, 7);

            graph.AddEdge(0, 1);
            graph.AddEdge(0, 3);
            graph.AddEdge(1, 2);
            graph.AddEdge(1, 3);
            graph.AddEdge(1, 4);
            graph.AddEdge(2, 0);
            graph.AddEdge(2, 4);
            graph.AddEdge(3, 2);
            graph.AddEdge(4, 5);
            graph.AddEdge(5, 6);
            graph.AddEdge(6, 3);

            var print = graph.PrintDFS(0);
        }
Ejemplo n.º 13
0
        public void HasConnection()
        {
            // Arrange
            var myGraph = new MatrixGraph(GraphTypes.Directed, 15);
            {
                myGraph.AddEdge(0, 1);
                myGraph.AddEdge(0, 2);
                myGraph.AddEdge(1, 9);
                myGraph.AddEdge(1, 2);
                myGraph.AddEdge(1, 3);
                myGraph.AddEdge(1, 11);
                myGraph.AddEdge(11, 9);
                myGraph.AddEdge(2, 1);
                myGraph.AddEdge(3, 4);
                myGraph.AddEdge(3, 8);
                myGraph.AddEdge(4, 10);
                myGraph.AddEdge(4, 3);
                myGraph.AddEdge(4, 5);
                myGraph.AddEdge(10, 7);
                myGraph.AddEdge(10, 4);
                myGraph.AddEdge(7, 6);
                myGraph.AddEdge(6, 7);
                myGraph.AddEdge(5, 6);
                myGraph.AddEdge(5, 2);
                myGraph.AddEdge(8, 13);
                myGraph.AddEdge(13, 14);
            }

            var graphMatrix = myGraph.GetGraphRepresentation();

            // Practice
            bool HasRoute(int node1, int node2)
            {
                var keepGoing    = true;
                var vertices     = graphMatrix.GetLength(0);
                var seachVisited = new int[vertices];

                var bfsOrder1 = new Queue <int>(vertices);

                bfsOrder1.Enqueue(node1);

                var bfsOrder2 = new Queue <int>(vertices);

                bfsOrder2.Enqueue(node2);

                bool HasVisited(int node, int nodeIndex) =>
                (seachVisited[node] & (1 << nodeIndex)) != 0;

                while (keepGoing)
                {
                    keepGoing = bfsOrder1.TryDequeue(out int node);
                    if (keepGoing)
                    {
                        for (byte i = 0; i < vertices; i++)
                        {
                            if (graphMatrix[node, i] == 1 && !HasVisited(i, 1))
                            {
                                bfsOrder1.Enqueue(i);
                                seachVisited[i] = seachVisited[i] | 1 << 1;
                                if (HasVisited(i, 2))
                                {
                                    return(true);
                                }
                            }
                        }
                    }

                    keepGoing = bfsOrder2.TryDequeue(out node);
                    if (keepGoing)
                    {
                        for (byte i = 0; i < vertices; i++)
                        {
                            if (graphMatrix[node, i] == 1 && !HasVisited(i, 2))
                            {
                                bfsOrder2.Enqueue(i);
                                seachVisited[i] = seachVisited[i] | 1 << 2;
                                if (HasVisited(i, 1))
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                }

                return(false);
            }

            Assert.True(HasRoute(2, 10));
            Assert.False(HasRoute(11, 8));
        }
Ejemplo n.º 14
0
        public void SimpleDijkstraTest(bool directed)
        {
            Graph g = new MatrixGraph(7, directed);

            g.AddEdge(0, 1, 5);
            g.AddEdge(0, 2, 0);
            g.AddEdge(0, 3, 3);
            g.AddEdge(1, 5, 3);
            g.AddEdge(1, 6, 4);
            g.AddEdge(2, 3, 2);
            g.AddEdge(2, 6, 15);
            g.AddEdge(3, 5, 2);
            g.AddEdge(3, 4, 1);
            g.AddEdge(4, 5, 12);
            g.AddEdge(5, 6, 3);
            var result = g.DAG(0);

            Assert.Equal(0, result[0].distance);
            Assert.Equal(5, result[1].distance);
            Assert.Equal(0, result[2].distance);
            Assert.Equal(2, result[3].distance);
            Assert.Equal(3, result[4].distance);
            Assert.Equal(4, result[5].distance);
            Assert.Equal(7, result[6].distance);
        }
        public void SimpleEqualsTest(bool directed)
        {
            Graph g = new MatrixGraph(7, directed);

            g.AddEdge(0, 1, 5);
            g.AddEdge(0, 2, 0);
            g.AddEdge(0, 3, 3);
            g.AddEdge(1, 5, 3);
            g.AddEdge(1, 6, 4);
            g.AddEdge(2, 3, 2);
            g.AddEdge(2, 6, 15);
            g.AddEdge(3, 5, 2);
            g.AddEdge(3, 4, 1);
            g.AddEdge(4, 5, 12);
            g.AddEdge(5, 6, 3);

            Graph g2 = new MatrixGraph(7, directed);

            g2.AddEdge(0, 1, 5);
            g2.AddEdge(0, 2, 0);
            g2.AddEdge(0, 3, 3);
            g2.AddEdge(1, 5, 3);
            g2.AddEdge(1, 6, 4);
            g2.AddEdge(2, 3, 2);
            g2.AddEdge(2, 6, 15);
            g2.AddEdge(3, 5, 2);
            g2.AddEdge(3, 4, 1);
            g2.AddEdge(4, 5, 12);
            g2.AddEdge(5, 6, 3);

            bool result = g.Equals(g2);

            Assert.True(result);
        }
        public void SimpleBellmanFordTest(bool directed)
        {
            Graph g = new MatrixGraph(7, directed);

            g.AddEdge(0, 1, 5);
            g.AddEdge(0, 2, 3);
            g.AddEdge(0, 3, 0);
            g.AddEdge(1, 4, 3);
            g.AddEdge(1, 6, 4);
            g.AddEdge(2, 4, 2);
            g.AddEdge(2, 5, 1);
            g.AddEdge(3, 2, 2);
            g.AddEdge(3, 6, 15);
            g.AddEdge(4, 6, 3);
            g.AddEdge(5, 4, 12);
            var result = g.BellmanFord(0);

            Assert.Equal(0, result[0].distance);
            Assert.Equal(5, result[1].distance);
            Assert.Equal(2, result[2].distance);
            Assert.Equal(0, result[3].distance);
            Assert.Equal(4, result[4].distance);
            Assert.Equal(3, result[5].distance);
            Assert.Equal(7, result[6].distance);
        }