python数据结构之图的实现方法

以下是关于“Python数据结构之图的实现方法”的完整攻略:

简介

图是一种常用的数据结构,用于表示对象之间的关系。在本教程中,我们将介绍如何使用Python实现图,包括邻接矩阵和邻接表两种实现方法。

邻接矩阵

邻接矩阵是一种常用的图的实现方法,它使用二维数组表示图中的节点和边。在邻接矩阵中,每个节点都对应数组中的一行和一列,如果两个节点之间有边相连,则在对应的数组元素中存储1,否则存储0。

以下是使用Python实现邻接矩阵的示例代码:

class Graph:
    def __init__(self, vertices):
        self.vertices = vertices
        self.matrix = [[0] * vertices for i in range(vertices)]

    def add_edge(self, u, v):
        self.matrix[u][v] = 1
        self.matrix[v][u] = 1

    def remove_edge(self, u, v):
        self.matrix[u][v] = 0
        self.matrix[v][u] = 0

    def print_graph(self):
        for i in range(self.vertices):
            for j in range(self.vertices):
                print(self.matrix[i][j], end=' ')
            print()

g = Graph(5)
g.add_edge(0, 1)
g.add_edge(0, 4)
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 3)
g.add_edge(3, 4)

g.print_graph()

在这个示例中,我们使用二维数组实现了邻接矩阵。我们定义了Graph类作为图的实现,使用matrix数组存储图的节点和边,使用add_edge函数添加边,使用remove_edge函数删除边,使用print_graph函数打印图的邻接矩阵。

邻接表

邻接表是一种常用的图的实现方法,它使用链表表示图中的节点和边。在邻接表中,每个节点都对应一个链表,链表中存储与该节点相连的所有节点。

以下是使用Python实现邻接表的示例代码:

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

class Graph:
    def __init__(self, vertices):
        self.vertices = vertices
        self.adj_list = [None] * vertices

    def add_edge(self, u, v):
        node = Node(v)
        node.next = self.adj_list[u]
        self.adj_list[u] = node

        node = Node(u)
        node.next = self.adj_list[v]
        self.adj_list[v] = node

    def remove_edge(self, u, v):
        node = self.adj_list[u]
        if node.value == v:
            self.adj_list[u] = node.next
        else:
            while node.next:
                if node.next.value == v:
                    node.next = node.next.next
                    break
                node = node.next

        node = self.adj_list[v]
        if node.value == u:
            self.adj_list[v] = node.next
        else:
            while node.next:
                if node.next.value == u:
                    node.next = node.next.next
                    break
                node = node.next

    def print_graph(self):
        for i in range(self.vertices):
            print(i, end=' ')
            node = self.adj_list[i]
            while node:
                print('->', node.value, end=' ')
                node = node.next
            print()

g = Graph(5)
g.add_edge(0, 1)
g.add_edge(0, 4)
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 3)
g.add_edge(3, 4)

g.print_graph()

在这个示例中,我们使用链表实现了邻接表。我们定义了Node类作为链表节点,定义了Graph类作为图的实现,使用adj_list数组存储图的节点和边,使用add_edge函数添加边,使用remove_edge函数删除边,使用print_graph函数打印图的邻接表。

示例说明

以下是两个示例说明,展示了如何使用Python实现图。

示例1

假设我们要使用Python实现图,可以使用示例代码:

class Graph:
    def __init__(self, vertices):
        self.vertices = vertices
        self.matrix = [[0] * vertices for i in range(vertices)]

    def add_edge(self, u, v):
        self.matrix[u][v] = 1
        self.matrix[v][u] = 1

    def remove_edge(self, u, v):
        self.matrix[u][v] = 0
        self.matrix[v][u] = 0

    def print_graph(self):
        for i in range(self.vertices):
            for j in range(self.vertices):
                print(self.matrix[i][j], end=' ')
            print()

g = Graph(5)
g.add_edge(0, 1)
g.add_edge(0, 4)
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 3)
g.add_edge(3, 4)

g.print_graph()

可以看到,我们成功使用Python实现了图,并使用示例测试了函数的功能。

示例2

假设我们要使用Python实现图,可以使用示例代码:

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

class Graph:
    def __init__(self, vertices):
        self.vertices = vertices
        self.adj_list = [None] * vertices

    def add_edge(self, u, v):
        node = Node(v)
        node.next = self.adj_list[u]
        self.adj_list[u] = node

        node = Node(u)
        node.next = self.adj_list[v]
        self.adj_list[v] = node

    def remove_edge(self, u, v):
        node = self.adj_list[u]
        if node.value == v:
            self.adj_list[u] = node.next
        else:
            while node.next:
                if node.next.value == v:
                    node.next = node.next.next
                    break
                node = node.next

        node = self.adj_list[v]
        if node.value == u:
            self.adj_list[v] = node.next
        else:
            while node.next:
                if node.next.value == u:
                    node.next = node.next.next
                    break
                node = node.next

    def print_graph(self):
        for i in range(self.vertices):
            print(i, end=' ')
            node = self.adj_list[i]
            while node:
                print('->', node.value, end=' ')
                node = node.next
            print()

g = Graph(5)
g.add_edge(0, 1)
g.add_edge(0, 4)
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 3)
g.add_edge(3, 4)

g.print_graph()

可以看到,我们成功使用Python实现了图,并使用示例测试了函数的功能。

本教程介绍了如何使用Python实现图,包括邻接矩阵和邻接表两种实现方法。我们使用二维数组实现了邻接矩阵,使用链表实现了邻接表。我们还提供了两个示例,展示了如何使用Python实现图。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python数据结构之图的实现方法 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python打开使用的方法

    要使用Python打开文件,有以下几种方法: 1. 使用open函数 可以使用内置函数open来打开文件,语法如下: file_object = open(file_name [, access_mode][, buffering]) 其中,file_name 是文件名(需要包含完整路径),access_mode 是文件的读写模式(默认是只读模式), buf…

    python 2023年5月19日
    00
  • Python实现向PPT中插入表格与图片的方法详解

    这里是关于“Python实现向PPT中插入表格与图片的方法详解”的攻略: Python实现向PPT中插入表格与图片的方法详解 准备工作: 安装Python-pptx模块 Python-pptx是用于生成和更新PowerPoint (.pptx)文件的Python库,它是PPT格式的Python实现。可以在官网上查看详细的安装方法。 使用Python创建一个P…

    python 2023年5月19日
    00
  • python实现录屏功能(亲测好用)

    下面是详细的攻略: Python实现录屏功能(亲测好用) 介绍 在某些情况下,我们需要录制屏幕上的操作过程,以便于之后进行回放或者与别人分享。Python 可以方便地实现屏幕录制功能,本文将介绍如何使用 Python 和一些第三方库实现录屏功能。 实现步骤 安装必要的库和软件 首先需要安装以下的库和软件: Python3 Pygame PIL ffmpeg …

    python 2023年5月19日
    00
  • Python 中文正则表达式笔记

    Python中文正则表达式笔记 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换等操作。在Python中,我们可以使用re模块来实现正则表达式的相关操作。本文将为您介绍Python中文正则表达式的基本语法和常用操作,以及两个示例说明。 基本语法 在Python中,我们可以使用re模块来实现正则表达式的相关操作。下面是一些常用的正则表达式语法: .…

    python 2023年5月14日
    00
  • Python命令行参数化的四种方式详解

    Python命令行参数化的四种方式详解 Python命令行参数化是在脚本调用时,通过命令行向脚本传递参数的一种方式。本文介绍Python命令行参数化的四种方式及其使用方法。 1. 使用sys模块 Python中的sys模块提供了一个名为argv的列表,该列表以字符串形式包含了命令行参数。通过该列表,我们可以轻松地对命令行参数进行处理。下面是一个使用sys模块…

    python 2023年6月2日
    00
  • 解决Python3.8用pip安装turtle-0.0.2出现错误问题

    针对“解决Python3.8用pip安装turtle-0.0.2出现错误问题”的完整攻略,以下是详细说明: 问题描述 在Python 3.8版本中,可能在使用pip安装turtle-0.0.2时会出现以下错误: ERROR: Command errored out with exit status 1: command: ‘path/to/python38/…

    python 2023年5月14日
    00
  • python将控制台输出保存至文件的方法

    首先需要明确一下“控制台输出”的含义。在Python中,我们可以通过print()函数在控制台输出内容(即将内容显示在命令行窗口中)。保存控制台输出到文件,可以让我们将输出的结果保存下来,以便日后查看或分析。 Python将控制台输出保存至文件,方法主要有两种:直接重定向(在命令行中重定向)或使用Python的logging模块写入日志文件。 直接将控制台输…

    python 2023年6月3日
    00
  • Python实现大乐透号码随机生成

    Python实现大乐透号码随机生成攻略 在Python中实现大乐透号码随机生成可以使用random库的函数来生成随机数进行组合,同时使用for循环来生成多组号码。 步骤 导入random库:使用import random来导入random库 定义生成号码函数:使用def语句定义生成号码函数,例如下面的代码 def generate_lottery(): “”…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部