# Eulerian and Hamiltonian path

## Introduction:

Graph theory, a branch of mathematics, provides a powerful framework for analyzing and understanding the relationships between various entities. Among the many concepts in graph theory, Eulerian and Hamiltonian paths stand out as fundamental and intriguing topics. These paths are essential in understanding the connectivity and traversal possibilities within a graph.

## Eulerian Paths:

An Eulerian path is a trail in a graph that traverses each edge exactly once. The Swiss mathematician Leonhard Euler first introduced this concept in the 18th century while solving the famous Seven Bridges of Königsberg problem. For a graph to have an Eulerian path, it must satisfy the following conditions:

• Connectedness: The graph must be connected, meaning there is a path between any two vertices.
• Degree: All vertices, except possibly two, must have an even degree.

If a graph meets these criteria, it is said to be Eulerian, and one or more Eulerian paths can be identified. Eulerian paths find applications in various fields such as network routing, DNA sequencing, and computer networks.

### Euler's Theorems:

Euler established two theorems that govern the existence of Eulerian paths in a graph. The first, known as Euler's Theorem, states that a connected graph has an Eulerian circuit (a closed Eulerian path) if and only if every vertex has an even degree. The second, Euler's Path Theorem, extends this idea to graphs where exactly two vertices have an odd degree. In such cases, an Eulerian path exists, but it won't form a closed circuit.

This graph has an Eulerian circuit: ABCDCA.

### Properties of Eulerian Paths:

• Existence: A graph has an Eulerian path if and only if it is connected and has at most two vertices with an odd degree. A vertex's degree is the number of edges incident to it.
• Eulerian Circuit: An Eulerian circuit is a closed Eulerian path that starts and ends at the same vertex. A graph contains an Eulerian circuit if and only if all of its vertices have an even degree.
• Fleury's Algorithm: Fleury's algorithm is a method to find an Eulerian path or circuit in a graph. It involves a series of edge choices while avoiding bridges (edges that, once traversed, disconnect the graph).

## Hamiltonian Paths:

In contrast, a Hamiltonian path is a traversal of a graph that visits each vertex exactly once. The path need not necessarily cover all edges, but it must touch every vertex exactly once. The concept is named after Sir William Rowan Hamilton, an Irish mathematician who made significant contributions to algebra and geometry. Determining whether a graph contains a Hamiltonian path is a well-known NP-complete problem, making it computationally challenging.

Unlike Eulerian paths, Hamiltonian paths do not have straightforward conditions for existence. The search for Hamiltonian paths is often guided by heuristics and algorithms due to the complexity of determining their existence. Applications of Hamiltonian paths include task scheduling, circuit design, and robotics path planning.

A Hamiltonian cycle in this graph is ABCDA.

### Hamilton's Theorems:

Determining the existence of Hamiltonian paths is a complex problem. Unlike Eulerian paths, no simple degree-based criteria can guarantee their existence. Hamiltonian paths often rely on more intricate structural properties of the graph. While no general theorem akin to Euler's Theorems exists, researchers have explored specific conditions under which Hamiltonian paths are likely to be present.

### Properties of Hamiltonian Paths:

• Existence: Determining whether a graph has a Hamiltonian path or circuit is an NP-complete problem, meaning that no efficient algorithm is known to solve it for all cases.
• Dirac's Theorem: Dirac's theorem provides a condition for the existence of Hamiltonian paths in simple graphs. If a simple graph has n vertices (where n > 2) and every vertex has a degree of at least n/2, then the graph has a Hamiltonian circuit.

## Eulerian vs. Hamiltonian Paths:

While Eulerian and Hamiltonian paths share the common goal of traversing a graph without revisiting vertices, they differ in their requirements and characteristics. Eulerian paths are more constrained, with specific conditions regarding vertex degrees, while Hamiltonian paths are generally more flexible but computationally harder to verify.

It's worth noting that every Eulerian path is also a Hamiltonian path, but not all Hamiltonian paths are Eulerian paths. This relationship emphasizes the broader scope of Hamiltonian paths but highlights the specific constraints Eulerian paths must meet.

### Contrasts and Connections:

Distinguishing Factors:

One key difference between Eulerian and Hamiltonian paths lies in their traversal patterns. Eulerian paths visit each edge exactly once, while Hamiltonian paths explore each vertex exactly once. Eulerian paths may revisit vertices but not edges, while Hamiltonian paths avoid revisiting both vertices and edges.

Graph Types:

Eulerian paths are closely tied to graphs with even-degree vertices, while Hamiltonian paths lack such a clear degree-based criterion. The nature of the problem and conditions for existence set these two path types apart.

Connectivity and Completeness:

Eulerian paths focus on the edges, ensuring that each one is traversed precisely once. Hamiltonian paths, on the other hand, prioritize complete exploration of vertices, with each vertex visited exactly once.

### Real-world Applications:

Network Design:

Eulerian paths find applications in network design, particularly in ensuring efficient data transmission. By understanding the connectivity of a network, engineers can optimize the routing of information through Eulerian circuits, minimizing delays and improving overall network performance.

Transportation Planning:

Hamiltonian paths play a vital role in transportation planning, where the goal is to find the most efficient route that covers all locations. This is particularly relevant in logistics and delivery services, where finding a Hamiltonian path can lead to streamlined and cost-effective delivery routes.

Circuit Design:

Eulerian circuits are used in circuit design to ensure that every connection is traversed exactly once. This is crucial in designing electronic circuits to avoid signal interference and optimize the functionality of the circuit.

Robotics and Path Planning:

Both Eulerian and Hamiltonian paths are employed in robotics for path planning. Robots are programmed to follow specific paths that ensure they cover all necessary points efficiently, making these concepts indispensable in the field of robotics.

## Implementation:

Explanation:

• This C++ program defines a class named Graph to represent an undirected graph using an adjacency matrix.
• The class has private members for the number of vertices (vertices) and the adjacency matrix (adjacencyMatrix). The adjacency matrix is a 2D vector initialized with zeros.
• The program provides methods to add edges to the graph, check if the graph is Eulerian, and check if it is Hamiltonian.
• The constructor of the Graph class takes the number of vertices as a parameter and initializes the adjacency matrix accordingly.
• The addEdge method is used to add an undirected edge between two vertices by updating the corresponding entries in the adjacency matrix.
• The isEulerian method checks if the graph has an Eulerian path.
• It does so by iterating through each vertex, calculating the degree of each vertex (count of adjacent vertices), and checking if all vertices have an even degree.
• If any vertex has an odd degree, the graph is not Eulerian.
• The isHamiltonian method is a placeholder and always returns false. Checking for Hamiltonian paths is generally more complex and might involve backtracking or dynamic programming.
• The detailed implementation for Hamiltonian path checking is not provided in this example.
• In the main function, an instance of the Graph class is created with 5 vertices, and edges are added to form a simple cycle.
• The program then checks and prints whether the graph is Eulerian and Hamiltonian.

Program Output:

## Conclusion:

In conclusion, Eulerian and Hamiltonian paths are fundamental concepts in graph theory, providing insights into the structure and connectivity of graphs. Eulerian paths, characterized by traversing each edge exactly once, are closely tied to the degrees of vertices in a graph. The existence of an Eulerian path is contingent upon the number of vertices with odd degrees. This property finds practical applications in various fields, including network optimization and circuit design.

On the other hand, Hamiltonian paths involve visiting each vertex exactly once, providing a holistic perspective on the graph's structure. Determining the existence of Hamiltonian paths is a more challenging problem than that of Eulerian paths, often requiring more complex analysis. Hamiltonian paths are pertinent in the study of computational complexity, with implications for algorithms and theoretical computer science.