博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图的基本算法--深度优先搜索(dfs) 和 广度优先搜索(bfs)
阅读量:4251 次
发布时间:2019-05-26

本文共 1410 字,大约阅读时间需要 4 分钟。

#   图#           0#         / | \#        1  2 - 4#       /#      3m = 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)

转载地址:http://kakei.baihongyu.com/

你可能感兴趣的文章
接口的简单使用
查看>>
关于接口的几点
查看>>
自己封装的一个简单组件:文字标签 文本框
查看>>
集合的一些概念总结
查看>>
几个常见的关于日期的SQL
查看>>
常见约束、事务及其他查询语句
查看>>
关于jdbc
查看>>
利用jdbc做的一个简单系统(接上一篇)
查看>>
对TextField 和JTextField 等文本编辑区的监听
查看>>
详解个推java服务端集成(干货)
查看>>
常见聚合函数
查看>>
简单子查询
查看>>
联表查询
查看>>
关于WindowListener的使用
查看>>
关于KeyListener的简单使用
查看>>
关于鼠标移动监听接口:MouseMotionListener
查看>>
TCP/IP详解笔记(一)
查看>>
501. Find Mode in Binary Search Tree
查看>>
504. Base 7
查看>>
593. Valid Square
查看>>