Graph Algorithm To Find All Connections Between Two Arbitrary Vertices
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
Introduction
In the realm of graph theory and computer science, finding all possible connections between two arbitrary vertices in a graph is a fundamental problem. This challenge has wide-ranging applications, including network routing, social network analysis, and various optimization problems. The solutions to these problems often involve traversing a graph in a systematic way to explore all paths between a pair of nodes.
Understanding Graphs
A graph is a mathematical representation consisting of a set of vertices and a set of edges . Each edge connects a pair of vertices, and it can be directed or undirected. Graphs can be:
- Directed: Edges have a direction, i.e., they go from one vertex to another.
- Undirected: Edges are bi-directional; they don’t have a designated origin and destination.
- Weighted: Edges have associated weights, representing costs, distances, or other metrics.
- Unweighted: All edges are treated equally without associated weights.
Problem Statement
Given a graph , and two vertices, (source) and (target), the task is to find all possible paths from to . This problem can be solved using various graph traversal algorithms.
Techniques to Find All Connections
Depth-First Search (DFS)
DFS is a classic algorithm used to explore all nodes and paths in a graph. When finding all paths between two nodes, DFS can be adapted to backtrack once it reaches a destination node or a dead-end.
DFS Algorithm for Finding All Paths
- Start at the source vertex .
- Mark the current node as visited to prevent cycles.
- Explore each adjacent unvisited vertex, recursively invoking DFS.
- Keep track of the path from to the current vertex.
- On reaching the target vertex , add the current path to the list of paths.
- Backtrack by removing the current vertex from the path and marking it as unvisited.
A Python implementation might look like this:
Breadth-First Search (BFS)
While BFS is more traditionally used for finding the shortest path, it's also possible to modify it for finding all paths. BFS explores all neighbors at the present depth before moving on to nodes at the next depth level.
Algorithm Considerations
- Cycle Detection: Ensure cycles are handled properly to prevent infinite loops, particularly in DFS.
- Memory Usage: DFS is more stack-intensive due to recursion, while BFS can consume more memory due to queue usage.
- Graph Type: Ensure algorithms are adapted for directed, undirected, weighted, and unweighted graphs.
Comparison Table
| Algorithm | Approach | Suitable For | Memory Usage | Pros | Cons |
| DFS | Recursive | Finding all paths in small graphs | Uses call stack | Simple to implement | Can be memory-intensive |
| BFS | Iterative | Finding shortest path or all paths in unweighted graphs | Uses queues for level storage | Level-wise exploration | Can be slow for deep graphs |
Extensions and Advanced Topics
- Advanced Data Structures: Using adjacency lists or matrices for graph representation can affect performance.
- Weighted Graphs: For weighted graphs, you might use a variant of BFS or algorithms like Dijkstra's Algorithm for shortest path, though they aren't directly for finding all paths.
- Dynamic Programming and Memoization: Storing previously computed paths to avoid redundant calculations.
Conclusion
Finding all connections between two vertices is a fundamental problem that showcases the power of graph algorithms. By understanding and adapting classic traversal techniques like DFS and BFS, one can effectively explore and analyze the intricate web of connections within a graph.
Related reading
- Graph as adjacency matrix time complexity
- Graph auto-layout algorithm
- Graph serialization
- Graph theory - force based autolayout algorithm
- Graph disconnected cannot obtain value for tensor Tensor
- Graph optimizations on a tensorflow serveable created using tf.Estimator
- Graph theory best algorithm to find combination of edges “directions”, where each node has at most one edge directed to it
- Graph transformation - vertices into edges and edges into vertices

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.