Python
Python

 

 

Introduction

A Hamiltonian cycle in a graph is a cycle that visits every vertex exactly once and returns to the starting vertex. The problem of finding a Hamiltonian cycle is NP-complete, meaning there is no known efficient solution. However, we can implement a backtracking approach to explore possible cycles.

Program Structure


def is_valid(v, pos, path, graph):
    # Check if this vertex can be added to the Hamiltonian Cycle
    if graph[path[pos - 1]][v] == 0:
        return False
    if v in path:
        return False
    return True

def hamiltonian_cycle_util(graph, path, pos):
    # Base case: if all vertices are included in the path
    if pos == len(graph):
        if graph[path[pos - 1]][path[0]] == 1:
            return True
        else:
            return False

    # Try different vertices as the next candidate
    for v in range(1, len(graph)):
        if is_valid(v, pos, path, graph):
            path[pos] = v
            if hamiltonian_cycle_util(graph, path, pos + 1):
                return True
            path[pos] = -1  # Backtrack

    return False

def find_hamiltonian_cycle(graph):
    path = [-1] * len(graph)
    path[0] = 0  # Starting from the first vertex

    if not hamiltonian_cycle_util(graph, path, 1):
        return None
    return path

Code Explanation

  • is_valid(v, pos, path, graph): This helper function checks whether the vertex v can be added to the Hamiltonian cycle at position pos. It checks if there is an edge from the last added vertex to v and ensures v has not been visited yet.
  • hamiltonian_cycle_util(graph, path, pos): This is a recursive function that attempts to build the Hamiltonian cycle. It checks if the cycle is complete and validates the next vertex to add. If it finds a valid configuration, it returns True; otherwise, it backtracks.
  • find_hamiltonian_cycle(graph): This function initializes the path and calls the recursive utility function. It starts the cycle from the first vertex (index 0) and returns the completed path if a Hamiltonian cycle is found.

Usage

To use the program, define a graph as an adjacency matrix. Each element graph[i][j] is 1 if there is an edge between vertex i and vertex j, otherwise it is 0. Call the find_hamiltonian_cycle(graph) function with your graph.

Example


graph = [
    [0, 1, 1, 1],
    [1, 0, 1, 0],
    [1, 1, 0, 1],
    [1, 0, 1, 0]
]

cycle = find_hamiltonian_cycle(graph)
if cycle:
    print("Hamiltonian Cycle found:", cycle)
else:
    print("No Hamiltonian Cycle found.")

Conclusion

This program demonstrates a backtracking approach to finding a Hamiltonian cycle in a graph. While this method is not efficient for large graphs due to its exponential time complexity, it illustrates the concept of exploring possible solutions recursively.

 

By Aditya Bhuyan

I work as a cloud specialist. In addition to being an architect and SRE specialist, I work as a cloud engineer and developer. I have assisted my clients in converting their antiquated programmes into contemporary microservices that operate on various cloud computing platforms such as AWS, GCP, Azure, or VMware Tanzu, as well as orchestration systems such as Docker Swarm or Kubernetes. For over twenty years, I have been employed in the IT sector as a Java developer, J2EE architect, scrum master, and instructor. I write about Cloud Native and Cloud often. Bangalore, India is where my family and I call home. I maintain my physical and mental fitness by doing a lot of yoga and meditation.

Leave a Reply

Your email address will not be published. Required fields are marked *

error

Enjoy this blog? Please spread the word :)