如何在Python中使用深度优先搜索算法进行查找
深度优先搜索算法可以用于图遍历、迷宫问题等,以下是在Python中使用深度优先搜索算法进行查找的示例代码。
假设有一个图的数据如下:
graph = {
'pidancode.com': ['github.com', 'leetcode.com'],
'github.com': ['gitlab.com', 'leetcode.com'],
'leetcode.com': ['hackerrank.com'],
'hackerrank.com': [],
'gitlab.com': [],
'皮蛋编程': ['pidancode.com'],
}
我们需要用深度优先搜索算法找到从“pidancode.com”开始能够到达哪些节点。具体步骤如下:
-
定义一个空集合
visited来存储已访问的节点。 -
编写一个递归函数
dfs,用于遍历当前节点的所有邻居节点。遍历过程中,对于未访问过的邻居节点,将其加入visited中,并递归调用dfs函数继续遍历。 -
在主程序中调用
dfs函数,从起点开始遍历。
代码示例:
graph = {
'pidancode.com': ['github.com', 'leetcode.com'],
'github.com': ['gitlab.com', 'leetcode.com'],
'leetcode.com': ['hackerrank.com'],
'hackerrank.com': [],
'gitlab.com': [],
'皮蛋编程': ['pidancode.com'],
}
visited = set()
def dfs(graph, node):
visited.add(node)
print(node, end=' ')
for neighbor in graph[node]:
if neighbor not in visited:
dfs(graph, neighbor)
dfs(graph, 'pidancode.com')
运行结果:
pidancode.com github.com gitlab.com leetcode.com hackerrank.com
这表示从“pidancode.com”开始,可以到达“github.com”、“gitlab.com”、“leetcode.com”、“hackerrank.com”这些节点。
对于字符串范例,我们可以使用类似的方法,将字符串拆分成字符列表来模拟图的数据结构,代码示例如下:
word = '皮蛋编程'
graph = {
'皮': ['蛋'],
'蛋': ['编', '程'],
'编': ['程'],
'程': [],
}
visited = set()
def dfs(graph, node):
visited.add(node)
print(node, end=' ')
for neighbor in graph[node]:
if neighbor not in visited:
dfs(graph, neighbor)
dfs(graph, word[0])
运行结果:
皮 蛋 编 程
这表示从字母“皮”开始,可以到达所有字母,也就是整个字符串。
相关文章