コード例 #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());
        }
コード例 #2
0
        public void IsHamiltonianEmpty()
        {
            UndirectedGraph <int, UndirectedEdge <int> > graph = ConstructGraph(Enumerable.Empty <Vertices>());

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

            Assert.IsFalse(algorithm.IsHamiltonian());
        }
コード例 #3
0
        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());
        }
コード例 #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());
        }
コード例 #5
0
        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());
        }
コード例 #6
0
        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());
        }
コード例 #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());
        }
コード例 #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());
        }
コード例 #9
0
        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());
        }
コード例 #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());
        }
コード例 #11
0
        public static bool IsHamiltonian <TVertex>(IUndirectedGraph <TVertex, UndirectedEdge <TVertex> > g)
        {
            var algorithm = new IsHamiltonianGraphAlgorithm <TVertex, UndirectedEdge <TVertex> >(g);

            return(algorithm.IsHamiltonian());
        }