# 图
# 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)
图的基本算法--深度优先搜索(dfs) 和 广度优先搜索(bfs)
最新推荐文章于 2020-05-28 23:20:17 发布