您的位置:首页 > 其它

图的基本算法--深度优先搜索(dfs) 和 广度优先搜索(bfs)

2017-10-12 11:53 471 查看
#   图
#           0
#         / | \
#        1  2 - 4
#       /
#      3

m = 999999    # 代表没有连接
a = [[0, 1, 1, m, 1],    # 邻接矩阵表示图
[1, 0, m, 1, m],
[1, m, 0, m, 1],
[m, 1, m, 0, m],
[1, m, 1, m, 0]]

n = 5            # 总点数
sm = 0           # 访问点计算
book = [0] * n   # 记录已经访问过的点

def dfs(cur):
"""
:param cur: 当前访问点
:return:
"""
global sm
print('%d' % cur, end=' ')
sm = sm + 1
if sm == n:
return

for i in range(0, n):
if a[cur][i] == 1 and book[i] == 0:
book[i] = 1
dfs(i)

def dfs_non_recursion(cur):
"""
:param cur: 当前访问点
:return:
"""
s = []
s.append(cur)       # 栈
book[cur] = 1
while len(s) != 0:
cur = s.pop()
print('%d' % cur, end=' ')

for i in range(n-1, -1, -1):  # 为了个递归的打印顺序相同
if a[cur][i] == 1 and book[i] == 0:
book[i] = 1
s.append(i)

def bfs(cur):
"""
:param cur: 当前访问点
:return:
"""
q = []            # 队列
q.append(cur)
while len(q) != 0:
cur = q.pop(0)
print('%d' % cur, end=' ')

for i in range(0, n):
if a[cur][i] == 1 and book[i] == 0:
book[i] = 1
q.append(i)

if __name__ == "__main__":
book[0] = 1
dfs(0)

for i in range(n):
book[i] = 0
print()

dfs_non_recursion(0)

for i in range(n):
book[i] = 0
print()

book[0] = 1
bfs(0)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索 算法 bfs dfs