Tarjan cycle detection help C
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
In computer science and programming, cycle detection is a critical problem, particularly when dealing with directed graphs. One well-known method for detecting cycles in a directed graph is Tarjan's algorithm, named after its inventor, Robert Tarjan. This depth-first search-based approach is efficient and widely used across various applications, including deadlock detection and circuit dependency analysis. Here, we delve into the implementation of Tarjan's algorithm for cycle detection in C# with detailed examples.
Tarjan's Cycle Detection Algorithm
Tarjan's algorithm leverages depth-first search (DFS) to find strongly connected components (SCCs) within a graph. A strongly connected component is a maximal subgraph where every vertex is reachable from every other vertex. If any of these SCCs contain more than one vertex, the graph contains a cycle.
How It Works
- Initialization: Assign each node a discovery time and a low link value. The low link value of a node is the smallest discovery time reachable from that node, including back edges.
- Depth-First Search (DFS): Perform a DFS traversal on the graph. For each visited node:
- Set its discovery and low link values.
- Visit each of its neighbors recursively.
- Update the low link value based on the discovery and low link values of neighboring nodes.
- If a node's low link value equals its discovery time, it represents the root of a strongly connected component.
- Cycle Detection: If any SCC contains more than one node, the graph has a cycle.
C# Implementation
The C# code below demonstrates how Tarjan's algorithm can be used for cycle detection in directed graphs:
- Advantages:
- Linear time complexity makes it efficient for large graphs.
- Clearly partitions graph into SCCs, providing additional insights beyond mere cycle detection.
- Limitations:
- Primarily suited for directed graphs.
- While efficient, the depth-first nature might not be ideal for all types of graph problems.
Related reading
- Tarjan's strongly-connected components algorithm - why index in the back edge?
- Teacher time schedule algorithm
- Technical Interview Longest Non-Decreasing Subsequence in MxN Matrix
- Tensor is not an element of this graph
- Task queue on Android like in GCD on iOS?
- Temporary queue made in Celery
- Task based asynchronous operation disabled in PCL Service Reference setting
- Task continuation on UI thread

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.