zoukankan      html  css  js  c++  java
  • 图的深度遍历

    class list_node:
        def __init__(self):
            self.val = 0
            self.next = None
    
    
    head = [list_node()] * 9  # 声明一个节点类型的链表数组
    
    run = [0] * 9
    
    
    def dfs(current):  # 深度优先函数
        run[current] = 1
        print('[%d] ' % current, end='')
        ptr = head[current].next
        while ptr != None:
            if run[ptr.val] == 0:  # 如果顶点尚未遍历,
                dfs(ptr.val)  # 就进行dfs的递归调用
            ptr = ptr.next
    
    
    # 声明图的边线数组
    data = [[1, 2], [2, 1], [1, 3], [3, 1], 
            [2, 4], [4, 2], [2, 5], [5, 2], 
            [3, 6], [6, 3], [3, 7], [7, 3], 
            [4, 8], [8, 4], [5, 8], [8, 5], 
            [6, 8], [8, 6], [8, 7], [7, 8]]
    for i in range(1, 9):  # 共有八个顶点
        run[i] = 0  # 把所有顶点设置成尚未遍历过
        head[i] = list_node()
        head[i].val = i  # 设置各个链表头的初值
        head[i].next = None
        ptr = head[i]  # 设置指针指向链表头
        for j in range(20):  # 二十条边线
            if data[j][0] == i:  # 如果起点和链表头相等,则把顶点加入链表
                newnode = list_node()
                newnode.val = data[j][1]
                newnode.next = None
                while True:
                    ptr.next = newnode  # 加入新节点
                    ptr = ptr.next
                    if ptr.next == None:
                        break
    
    print('图的邻接表内容:')  # 打印图的邻接表内容
    for i in range(1, 9):
        ptr = head[i]
        print('顶点 %d=> ' % i, end='')
        ptr = ptr.next
        while ptr != None:
            print('[%d] ' % ptr.val, end='')
            ptr = ptr.next
        print()
    print('深度优先遍历的顶点:')  # 打印深度优先遍历的顶点
    dfs(1)
    print()

  • 相关阅读:
    WPF中StringToImage和BoolToImage简单用法
    linux定时执行任务
    进程管理
    防火墙和网络安全
    ICMP
    茶叶知识
    插花、花艺、种植
    AD域中添加了一个策略导致的问题
    写一个工具,将批量的“规章制度”文件上传到广西门户网站对应的文档库中
    SharePoint Online 创建门户网站系列之定制栏目
  • 原文地址:https://www.cnblogs.com/jzxs/p/10846741.html
Copyright © 2011-2022 走看看