图的基本算法--深度优先搜索(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)
相关文章推荐
- 算法: 无向图的深度优先搜索(dfs)和广度优先搜索(bfs)
- Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
- 图算法(一)——基本图算法(BFS,DFS及其应用)(2)
- [Python Data Structure] 广度优先搜索(BFS)和深度优先搜索(DFS)
- 图(邻接表)的遍历——DFS(深度优先搜索)和BFS(广度优先搜索)和连通图
- 图的深度优先搜索(DFS)、广度优先搜索(BFS)
- 二叉树 深度优先搜索(DFS)、广度优先搜索(BFS)
- HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)
- 图的基本算法(BFS和DFS)
- HDU 1312 Red and Black DFS(深度优先搜索) 和 BFS(广度优先搜索)
- DFS(深度优先搜索)___BFS(广度优先搜索)过程图解
- 图的深度优先搜索(DFS)和广度优先搜索(BFS)
- 简单DFS(深度优先搜索)和BFS(广度优先搜索)学习积累
- 图的基本算法(BFS和DFS)
- DFS(深度优先搜索)与BFS(广度优先搜索)
- 关于图的广度优先搜索(BFS)和深度优先搜索(DFS)
- 深度优先搜索(DFS)&广度优先搜索(BFS)
- 图的广度优先搜索(BFS)和深度优先搜索(DFS)
- 图的 深度优先搜索(DFS) 以及 广度优先搜索(BFS)
- leetcode:深度优先搜索(DFS)和广度优先搜索(BFS)