【数据结构】 Python实现广度优先搜索BFS

代码如下

import numpy as np

def visit(v):
    return print(str(v) + "->",end='')

def FirsNeighbor(v):
    t = -1
    for i in range(g.shape[0]):
        if g[v][i] == 1:
            t = 1
            break
    if(t == 1):
        return i
    else:
        return t
        
def OpenDoor(p):
    if(visited[p] == True):
        return 0
    else:
        return 1

def NextNeighbor(v,w):
    l = []
    for i in range(g.shape[0]):
        if g[v][i] == 1:
            l.append(i)
            
    if(len(l) > 1 and OpenDoor(l[1])):
        return l[1]
    else:
        return -1

def BFS(g, v):
    visit(v)
    visited[v] = True
    while(queue != []):
        v = queue[0]
        queue.pop(0)
        w = FirsNeighbor(v)
        while(w >= 0):
            if(visited[w] == False):
                visit(w)
                visited[w] = True
                queue.append(w)

            w = NextNeighbor(v,w)
            
if __name__ == "__main__":
    
    g =np.array([[0,1,0,0,1,0],
                 [1,0,0,0,0,1],
                 [0,0,0,1,0,1],
                 [0,0,1,0,0,0],
                 [1,0,0,0,0,0],
                 [0,1,1,0,0,0]])
    
    visited = np.zeros(g.shape[0])
    for i in range(g.shape[0]):
        if(visited[i] != 1):
            queue = [i]
            BFS(g, i)
            print("\n")
        
    

运行结果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值