建立一个有向图的领接表

键盘输入数据,建立一个有向图的领接表,输出该邻接表并计算各顶点的度

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/206627
  • 你也可以参考下这篇文章:采用邻接矩阵实现有向网的存储,建立有向网,并实现单源最短路径
  • 除此之外, 这篇博客: 独立看门狗中的 看门狗解决的问题是什么 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在启动正常运行的时候,系统不能复位。
    在系统跑飞(程序异常执行)的情况,系统复位,程序重新执行。

  • 您还可以看一下 朱有鹏老师的巫妖王51单片机开发板配套视频课程课程中的 中断方式独立按键小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以解决该问题。

    首先,我们需要了解邻接表的数据结构。邻接表是一种存储有向图中各个顶点之间相互关系的数据结构,它是一个由结构体(或类)和指针构成的链表数组,其中每个结点的数据域用来存储每个顶点的度数,指针域则用来存储各个顶点的邻接点。因此,我们需要在构建邻接表的同时计算每个顶点的度数。

    我们按照以下步骤来建立一个有向图的邻接表:

    1. 首先,我们需要输入有向图的数据。我们可以采用键值对的方式存储这些数据,即字典(dictionary)数据结构。字典中的键是顶点,值是一组由该顶点指向的顶点组成的列表。例如,对于一个指向b,c的有向边,我们可以用字典中的键值对" a: [b, c]"来表示它。

    示例代码:

    graph_data = {} while True: data = input("请输入有向图的数据(以空格分隔,以‘end’结束):") if data == 'end': break start, end = data.strip().split() if start not in graph_data: graph_data[start] = [end] else: graph_data[start].append(end) print(graph_data)

    1. 建立邻接表。我们可以用一个字典(dictionary)数据结构来存储邻接表,其中每个键代表一个顶点,每个键对应的值是一个链表,链表中存储该顶点指向的所有顶点。我们可以通过遍历字典中的键值对来构建这个邻接表,并计算每个顶点的度数。

    示例代码:

    adj_list = {} in_degree = {} for node in graph_data: if node not in adj_list: adj_list[node] = [] in_degree[node] = 0 for neighbor in graph_data[node]: if neighbor not in adj_list: adj_list[neighbor] = [] in_degree[neighbor] = 1 else: in_degree[neighbor] += 1 adj_list[node].append(neighbor) print(adj_list) print(in_degree)

    1. 输出邻接表。我们可以遍历邻接表中的键值对,依次输出每个顶点指向的所有顶点,并在最后输出每个顶点的度数。

    示例代码:

    for node in adj_list: print(node, end=' -> ') for neighbor in adj_list[node]: print(neighbor, end=' ') print() print("每个顶点的度数为:") for node in in_degree: print(node, in_degree[node])

    1. 最后,我们可以添加必要的提示信息,以及对程序进行优化,提高其可读性和效率。

    完整代码如下:

    graph_data = {}
    while True:
        data = input("请输入有向图的数据(以空格分隔,以‘end’结束):")
        if data == 'end':
            break
        start, end = data.strip().split()
        if start not in graph_data:
            graph_data[start] = [end]
        else:
            graph_data[start].append(end)
    
    adj_list = {}
    in_degree = {}
    for node in graph_data:
        if node not in adj_list:
            adj_list[node] = []
            in_degree[node] = 0
        for neighbor in graph_data[node]:
            if neighbor not in adj_list:
                adj_list[neighbor] = []
                in_degree[neighbor] = 1
            else:
                in_degree[neighbor] += 1
            adj_list[node].append(neighbor)
    
    print("输入的有向图的邻接表为:")
    for node in adj_list:
        print(node, end=' -> ')
        for neighbor in adj_list[node]:
            print(neighbor, end=' ')
        print()
    
    print("每个顶点的度数为:")
    for node in in_degree:
        print(node, in_degree[node])
    

    建议优化:

    1. 在输入有向图的数据时,可以添加对输入格式的检查,以避免程序出现错误。
    2. 在建立邻接表时,可以使用集合(set)数据结构来存储每个顶点指向的顶点,以避免重复添加顶点到邻接表中。
    3. 在输出邻接表和度数时,可以使用字符串格式化来输出结果,以提高代码的可读性。
    4. 可以将代码封装为一个函数,使其更具通用性和可重用性。