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

yizhihongxing

以下是关于“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中time tzset()函数实例用法

    当我们使用 Python 进行时间计算时,时区始终是一个关键的问题。Python 的 time 模块提供了一个 tzset() 函数,用于设置当前系统的本地时区信息。本篇文章将详细讲解 Python 中 time tzset() 函数的用法。 函数参数 此函数不接受参数。 示例1 以下示例展示了如何在 Python 中使用 tzset() 函数设置本地时区信…

    python 2023年6月3日
    00
  • Python 一键制作微信好友图片墙的方法

    Python 一键制作微信好友图片墙的方法 1. 简介 在这篇教程中,我们将使用Python编写一个小程序,可以从微信好友中获取头像,并制作成一张图片墙展示出来,同时也会介绍如何使用第三方库Pillow来编辑图片。 2. 准备工作 安装Python环境:在Python官网下载并安装Python的最新版本。 安装需要的第三方库:在命令行中依次运行以下指令即可安…

    python 2023年6月3日
    00
  • Python 自动化常用操作及glob使用大全

    下面我就来详细讲解一下关于“Python 自动化常用操作及glob使用大全”的完整攻略。本文主要介绍如何用Python实现自动化操作,包括文件操作、网络请求、图像处理等,并介绍了使用glob模块查询文件的方法。 一、Python 自动化常用操作 本节主要介绍一些Python自动化操作的示例。 1. 文件操作 创建文件夹 import os os.mkdir(…

    python 2023年5月19日
    00
  • 详解Python实现字典合并的四种方法

    以下是详细讲解“详解Python实现字典合并的四种方法”的攻略: 概述 当涉及到合并两个或以上的Python字典时,我们可以使用多种方法来实现。在本文中,我们将会讨论四种常见的方法,包括: 使用update()方法 使用“**”操作符 使用chainMap() 使用字典解析式 使用update()方法合并字典 update()方法是Python内置的一个方法…

    python 2023年5月13日
    00
  • Python 高阶函数的装饰器

    下面我会详细讲解Python高阶函数的装饰器使用方法的完整攻略。 什么是装饰器 装饰器是一种可以在不修改原函数的情况下,给函数增加新的功能且可以动态修改功能的函数。在Python中,装饰器是一种语法糖,它通过@符号将一个函数名放在一个特定的函数上面来实现。 Python高阶函数的装饰器使用方法 使用装饰器的过程包括两个步骤:定义装饰器函数和使用装饰器函数。 …

    python-answer 2023年3月25日
    00
  • python人工智能深度学习算法优化

    下面是详细讲解“Python人工智能深度学习算法优化”的完整攻略,包括算法优化方法、Python实现和两个示例。 算法优化方法 深度学习算法优化是通过改进算法的训练过程,提高模型的性能和泛化能力。常见的深度学习算法优化方法包括以下几种: 1. 正则化 正则化是一种常用的深度学习算法优化方法,其主要思想是对模型参数进行约束,避免模型过拟合。常见的正则化方法包括…

    python 2023年5月14日
    00
  • Python基础学习之反射机制详解

    Python基础学习之反射机制详解 1. 反射机制的概念 在Python中,反射机制指的是在运行时(runtime)动态地访问、检查、修改程序对象的能力。具体来说,可以通过字符串形式的对象名来访问对象的属性、方法,或者通过属性名、方法名来访问属性、方法。 2. 反射机制的应用 2.1 动态导入模块 Python中的import语句可以在程序运行时动态地导入模…

    python 2023年6月3日
    00
  • python的keyword模块用法实例分析

    Python是一种强大、易于学习和高效的编程语言,具有广泛的应用领域。在Python中,有许多内置的模块,这些模块可以帮助我们更方便、更高效地完成一些任务。其中一个非常有用的模块是keyword模块,它可以让我们查看Python中的保留关键字。 一、什么是keyword模块 keyword模块是Python内置模块之一,它提供了一个列表,其中包含Python…

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