Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Using Python, or Swift write a program that implements a backtracking algorithm

ID: 3710792 • Letter: U

Question

Using Python, or Swift write a program that implements a backtracking algorithm that solves the Hamilton Circuits Problem . Your program should conform to the following specifications.

Give the pre condition and post condition

Prompt the user for the number of vertices in the graph.

Prompt the user to enter the adjacency matrix of the graph one row at a time.

Print the adjacency matrix of the graph.

Print the first solution and ask the user if they want the rest of the solutions.

If the user indicates they want the rest of the solutions, print them without any additional prompts.

Explanation / Answer

# Python program for solution of

# hamiltonian cycle problem

class Graph():

    def __init__(self, vertices):

        self.graph = [[0 for column in range(vertices)]

                            for row in range(vertices)]

        self.V = vertices

    ''' Check if this vertex is an adjacent vertex

        of the previously added vertex and is not

        included in the path earlier '''

    def isSafe(self, v, pos, path):

        # Check if current vertex and last vertex

        # in path are adjacent

        if self.graph[ path[pos-1] ][v] == 0:

            return False

        # Check if current vertex not already in path

        for vertex in path:

            if vertex == v:

                return False

        return True

    # A recursive utility function to solve

    # hamiltonian cycle problem

    def hamCycleUtil(self, path, pos):

        # base case: if all vertices are

        # included in the path

        if pos == self.V:

            # Last vertex must be adjacent to the

            # first vertex in path to make a cyle

            if self.graph[ path[pos-1] ][ path[0] ] == 1:

                return True

            else:

                return False

        # Try different vertices as a next candidate

        # in Hamiltonian Cycle. We don't try for 0 as

        # we included 0 as starting point in in hamCycle()

        for v in range(1,self.V):

            if self.isSafe(v, pos, path) == True:

                path[pos] = v

                if self.hamCycleUtil(path, pos+1) == True:

                    return True

                # Remove current vertex if it doesn't

                # lead to a solution

                path[pos] = -1

        return False

    def hamCycle(self):

        path = [-1] * self.V

  

        path[0] = 0

        if self.hamCycleUtil(path,1) == False:

            print "Solution does not exist "

            return False

        self.printSolution(path)

        return True

    def printSolution(self, path):

        print "Solution Exists: Following is one Hamiltonian Cycle"

        for vertex in path:

            print vertex,

        print path[0], " "

g1 = Graph(5)

g1.graph = [ [0, 1, 0, 1, 0], [1, 0, 1, 1, 1],

             [0, 1, 0, 0, 1,],[1, 1, 0, 0, 1],

             [0, 1, 1, 1, 0], ]

# Print the solution

g1.hamCycle();

g2 = Graph(5)

g2.graph = [ [0, 1, 0, 1, 0], [1, 0, 1, 1, 1],

           [0, 1, 0, 0, 1,], [1, 1, 0, 0, 0],

           [0, 1, 1, 0, 0], ]

# Print the solution

g2.hamCycle();

# Python program for solution of

# hamiltonian cycle problem

class Graph():

    def __init__(self, vertices):

        self.graph = [[0 for column in range(vertices)]

                            for row in range(vertices)]

        self.V = vertices

    ''' Check if this vertex is an adjacent vertex

        of the previously added vertex and is not

        included in the path earlier '''

    def isSafe(self, v, pos, path):

        # Check if current vertex and last vertex

        # in path are adjacent

        if self.graph[ path[pos-1] ][v] == 0:

            return False

        # Check if current vertex not already in path

        for vertex in path:

            if vertex == v:

                return False

        return True

    # A recursive utility function to solve

    # hamiltonian cycle problem

    def hamCycleUtil(self, path, pos):

        # base case: if all vertices are

        # included in the path

        if pos == self.V:

            # Last vertex must be adjacent to the

            # first vertex in path to make a cyle

            if self.graph[ path[pos-1] ][ path[0] ] == 1:

                return True

            else:

                return False

        # Try different vertices as a next candidate

        # in Hamiltonian Cycle. We don't try for 0 as

        # we included 0 as starting point in in hamCycle()

        for v in range(1,self.V):

            if self.isSafe(v, pos, path) == True:

                path[pos] = v

                if self.hamCycleUtil(path, pos+1) == True:

                    return True

                # Remove current vertex if it doesn't

                # lead to a solution

                path[pos] = -1

        return False

    def hamCycle(self):

        path = [-1] * self.V

  

        path[0] = 0

        if self.hamCycleUtil(path,1) == False:

            print "Solution does not exist "

            return False

        self.printSolution(path)

        return True

    def printSolution(self, path):

        print "Solution Exists: Following is one Hamiltonian Cycle"

        for vertex in path:

            print vertex,

        print path[0], " "

g1 = Graph(5)

g1.graph = [ [0, 1, 0, 1, 0], [1, 0, 1, 1, 1],

             [0, 1, 0, 0, 1,],[1, 1, 0, 0, 1],

             [0, 1, 1, 1, 0], ]

# Print the solution

g1.hamCycle();

g2 = Graph(5)

g2.graph = [ [0, 1, 0, 1, 0], [1, 0, 1, 1, 1],

           [0, 1, 0, 0, 1,], [1, 1, 0, 0, 0],

           [0, 1, 1, 0, 0], ]

# Print the solution

g2.hamCycle();

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote