Exemplo n.º 1
0
        public void IsHamiltonian()
        {
            // Hamiltonian
            UndirectedGraph <int, UndirectedEdge <int> > graph = CreateUndirectedGraph(new[]
            {
                new Vertices(1, 2),
                new Vertices(2, 3),
                new Vertices(1, 3),
                new Vertices(2, 4),
                new Vertices(3, 4)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsTrue(algorithm.IsHamiltonian());

            // Not Hamiltonian
            graph = CreateUndirectedGraph(new[]
            {
                new Vertices(1, 2),
                new Vertices(2, 3),
                new Vertices(2, 4),
                new Vertices(3, 4)
            });

            algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);
            Assert.IsFalse(algorithm.IsHamiltonian());
        }
        public void IsHamiltonianEmpty()
        {
            UndirectedGraph <int, UndirectedEdge <int> > graph = ConstructGraph(Enumerable.Empty <Vertices>());

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsFalse(algorithm.IsHamiltonian());
        }
        public void IsHamiltonianTwoVerticesTrue()
        {
            UndirectedGraph <int, UndirectedEdge <int> > graph = ConstructGraph(new[]
            {
                new Vertices(1, 2)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsTrue(algorithm.IsHamiltonian());
        }
Exemplo n.º 4
0
        public void IsHamiltonianOneVertexWithCycle()
        {
            UndirectedGraph <int, UndirectedEdge <int> > graph = CreateUndirectedGraph(new[]
            {
                new Vertices(1, 1)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsTrue(algorithm.IsHamiltonian());
        }
        public void IsHamiltonianTwoVerticesFalse()
        {
            var graph = ConstructGraph(new[]
            {
                new Vertices(1, 1),
                new Vertices(2, 2)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsFalse(algorithm.IsHamiltonian());
        }
        public void IsHamiltonianFalse()
        {
            UndirectedGraph <int, UndirectedEdge <int> > graph = ConstructGraph(new[]
            {
                new Vertices(1, 2),
                new Vertices(2, 3),
                new Vertices(2, 4),
                new Vertices(3, 4)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsFalse(algorithm.IsHamiltonian());
        }
Exemplo n.º 7
0
        public void IsHamiltonianWithParallelEdges()
        {
            UndirectedGraph <int, UndirectedEdge <int> > graph = CreateUndirectedGraph(new[]
            {
                new Vertices(1, 2),
                new Vertices(1, 2),
                new Vertices(3, 4),
                new Vertices(3, 4)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsFalse(algorithm.IsHamiltonian());
        }
Exemplo n.º 8
0
        public void IsHamiltonianWithLoops()
        {
            var graph = CreateUndirectedGraph(new[]
            {
                new Vertices(1, 1),
                new Vertices(1, 1),
                new Vertices(2, 2),
                new Vertices(2, 2),
                new Vertices(2, 2),
                new Vertices(3, 3),
                new Vertices(3, 3)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsFalse(algorithm.IsHamiltonian());
        }
        public void IsHamiltonian10VerticesDiracsTheorem()
        {
            // This graph is hamiltonian and satisfies Dirac's theorem. This test should work faster
            UndirectedGraph <int, UndirectedEdge <int> > graph = ConstructGraph(new[]
            {
                new Vertices(1, 2),
                new Vertices(1, 3),
                new Vertices(1, 4),
                new Vertices(1, 7),
                new Vertices(1, 8),
                new Vertices(1, 10),
                new Vertices(2, 6),
                new Vertices(2, 9),
                new Vertices(2, 4),
                new Vertices(2, 5),
                new Vertices(3, 4),
                new Vertices(3, 6),
                new Vertices(3, 7),
                new Vertices(3, 8),
                new Vertices(3, 8),
                new Vertices(4, 6),
                new Vertices(4, 5),
                new Vertices(4, 7),
                new Vertices(5, 7),
                new Vertices(5, 6),
                new Vertices(5, 9),
                new Vertices(5, 10),
                new Vertices(6, 9),
                new Vertices(6, 10),
                new Vertices(6, 7),
                new Vertices(7, 8),
                new Vertices(8, 9),
                new Vertices(8, 10),
                new Vertices(9, 10)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsTrue(algorithm.IsHamiltonian());
        }
Exemplo n.º 10
0
        public void IsHamiltonianNotDiracsTheorem()
        {
            // This graph is Hamiltonian but don't satisfy Dirac's theorem. This test should work slowlier
            UndirectedGraph <int, UndirectedEdge <int> > graph = CreateUndirectedGraph(new[]
            {
                new Vertices(1, 2),
                new Vertices(1, 3),
                new Vertices(1, 4),
                new Vertices(1, 7),
                new Vertices(1, 8),
                new Vertices(1, 10),
                new Vertices(2, 6),
                new Vertices(2, 9),
                new Vertices(2, 4),
                new Vertices(3, 4),
                new Vertices(3, 6),
                new Vertices(3, 7),
                new Vertices(3, 8),
                new Vertices(4, 6),
                new Vertices(4, 5),
                new Vertices(4, 7),
                new Vertices(5, 7),
                new Vertices(5, 6),
                new Vertices(5, 9),
                new Vertices(5, 10),
                new Vertices(6, 9),
                new Vertices(6, 10),
                new Vertices(6, 7),
                new Vertices(7, 8),
                new Vertices(8, 9),
                new Vertices(8, 10),
                new Vertices(9, 10)
            });

            var algorithm = new IsHamiltonianGraphAlgorithm <int, UndirectedEdge <int> >(graph);

            Assert.IsTrue(algorithm.IsHamiltonian());
        }
Exemplo n.º 11
0
        public static bool IsHamiltonian <TVertex>(IUndirectedGraph <TVertex, UndirectedEdge <TVertex> > g)
        {
            var algorithm = new IsHamiltonianGraphAlgorithm <TVertex, UndirectedEdge <TVertex> >(g);

            return(algorithm.IsHamiltonian());
        }