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

来源:互联网 发布:ubuntu 突然无法上网 编辑:程序博客网 时间:2024/06/05 12:44
#   图#           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)
阅读全文
0 0
原创粉丝点击