题目描述
这是一个关于图论的基本问题,通常考察对图的遍历和搜索算法的理解。以下是题目的英文描述:
Given a directed graph, return true if and only if it contains a cycle.
中文描述:
给定一个有向图,如果它包含一个环,则返回 true,否则返回 false。
解决思路
解决这类问题通常有以下几种方法:
- 深度优先搜索 (DFS): 使用递归或栈来遍历图的每个节点,如果在遍历过程中遇到了已经访问过的节点,则说明存在环。
- 广度优先搜索 (BFS): 使用队列来遍历图的每个节点,同时记录每个节点的前驱节点,如果在遍历过程中遇到了已经访问过的节点,并且这个节点不是其前驱节点,则说明存在环。
- Floyd 算法: 对于加权图,使用动态规划的方法检查图中是否存在环。
示例代码
以下是一个使用 DFS 解决此问题的 Python 示例代码:
def hasCycle(graph):
visited = set()
def dfs(node):
if node in visited:
return True
visited.add(node)
for neighbor in graph[node]:
if dfs(neighbor):
return True
return False
for node in graph:
if dfs(node):
return True
return False
扩展阅读
如果您对图论问题感兴趣,可以阅读更多相关内容。您可以访问本站提供的 [图论基础教程](/coding_practice/leetcode/graph_theory basics)。
图片展示
下面展示一个简单的图论示例: