python屏幕找图算法_Python图遍历算法

图在解决许多重要的数学难题中是非常有用的数据结构。 例如计算机网络拓扑或分析化学化合物的分子结构。 它们还用于城市交通或路线规划,甚至用于人类语言和语法。 所有这些应用程序都有遍历图的共同挑战,并确保图的所有节点都被访问。 有两种常见的已建立的方法来进行这种遍历,下面将对其进行描述。

深度优先遍历:

也称为深度优先搜索(DFS),该算法使用堆栈记住在任何迭代中发生死角时开始搜索的下一个顶点。 使用设置的数据类型在python中实现DFS图,因为它们提供了跟踪访问和未访问节点所需的功能。

参考以下代码的实现 -

class graph:

def __init__(self,gdict=None):

if gdict is None:

gdict = {}

self.gdict = gdict

# Check for the visisted and unvisited nodes

def dfs(graph, start, visited = None):

if visited is None:

visited = set()

visited.add(start)

print(start)

for next in graph[start] - visited:

dfs(graph, next, visited)

return visited

gdict = { "a" : set(["b","c"]),

"b" : set(["a", "d"]),

"c" : set(["a", "d"]),

"d" : set(["e"]),

"e" : set(["a"])

}

dfs(gdict, 'a')

执行上面示例代码,得到以下结果 -

a

b

d

e

c

广度优先遍历

也称为广度优先搜索(BFS),该算法使用队列记住当任何迭代中发生死角时,获取下一个顶点以开始搜索。

我们使用之前讨论的队列数据结构在python中实现BFS。 当继续访问相邻的未访问节点并继续将其添加到队列中。然后,开始只出现没有未访问节点的节点。 当没有下一个相邻节点被访问时,停止程序。

参考以下代码的实现 -

import collections

class graph:

def __init__(self,gdict=None):

if gdict is None:

gdict = {}

self.gdict = gdict

def bfs(graph, startnode):

# Track the visited and unvisited nodes using queue

seen, queue = set([startnode]), collections.deque([startnode])

while queue:

vertex = queue.popleft()

marked(vertex)

for node in graph[vertex]:

if node not in seen:

seen.add(node)

queue.append(node)

def marked(n):

print(n)

# The graph dictionary

gdict = { "a" : set(["b","c"]),

"b" : set(["a", "d"]),

"c" : set(["a", "d"]),

"d" : set(["e"]),

"e" : set(["a"])

}

bfs(gdict, "a")

执行上面示例代码,得到以下结果 -

a c b d e

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值