python广度优先与深度优先_经典算法python代码实现(广度优先、深度优先)

转自:https://blog..net/rush_b/article/details/78386796

之前学算法经常不求甚解,懒癌发作不敲代码不实践,到头来自己挖的坑还是得自己填,我会陆续更新代码,本文大量代码来自互联网,能找到出处的我会尽量贴上出处

广度优先搜索、深度优先搜索

http://www..com/yupeng/p/3414736.html#commentform

class graph():

def __init__(self,*arg,**kwargs):

self.node_neighbors={}

self.visited={}

def add_nodes(self,nodelist):

for node in nodelist:

self.add_node(node)

def add_node(self,node):

if node not in self.node_neighbors.keys:

self.node_neighbors[node]=[]

def add_edge(self,edge):

u,v=edge

if (u not in self.node_neighbors[v]) and (v not in self.node_neighbors[u]):

self.node_neighbors[u].append(v)

if u!=v:

self.node_neighbors[v].append(u)

def depth_first_search(self,root=None):

self.visited={}

order=[]

def dfs(n):

self.visited[n]=True

order.append(n)

for node in self.node_neighbors[n]:

if node not in self.visited:

dps(node)

if root:

dps(root)

for n in self.node_neighbors.keys:

if n not in self.visited:

dps(n)

print(order)

return order

def breadth_first_search(self,root=None):

self.visited={}

order=[]

queue=[]

def bfs():

while(len(queue)>0):

node = queue.pop(0)

self.visited[node]=True

for n in self.node_neighbors[node]:

if not n in self.visited and not n in queue:

order.append(n)

queue.append(n)

if root:

queue.append(root)

order.append(root)

bfs()

for node in self.nodes():

if not node in self.visited:

queue.append(node)

order.append(node)

bfs()

print (order)

return order

if __name__ == '__main__':

g = Graph()

g.add_nodes([i+1 for i in range(8)])

g.add_edge((1, 2))

g.add_edge((1, 3))

g.add_edge((2, 4))

g.add_edge((2, 5))

g.add_edge((4, 8))

g.add_edge((5, 8))

g.add_edge((3, 6))

g.add_edge((3, 7))

g.add_edge((6, 7))

print ("nodes:", g.node_neighbors)

order = g.breadth_first_search(1)

order = g.depth_first_search(1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值