返回介绍

Graph

发布于 2025-02-22 13:01:20 字数 1368 浏览 0 评论 0 收藏 0

图的表示通常使用 邻接矩阵和邻接表 ,前者易实现但是对于稀疏矩阵会浪费较多空间,后者使用链表的方式存储信息但是对于图搜索时间复杂度较高。

编程实现

邻接矩阵

设顶点个数为 V, 那么邻接矩阵可以使用 V × V 的二维数组来表示。 g[i][j] 表示顶点 i 和顶点 j 的关系,对于无向图可以使用 0/1 表示是否有连接,对于带权图则需要使用 INF 来区分。有重边时保存边数或者权值最大/小的边即可。

Python

g = [[0 for _ in range(V)] for _ in range(V)]

Java

/* Java Definition */
int[][] g = new int[V][V];

邻接表

邻接表通过表示从顶点 i 出发到其他所有可能能到的边。

有向图

Python

class DirectedGraphNode:
  def __init__(self, x):
    self.label = x
    self.neighbors = []

Java

/* Java Definition */
class DirectedGraphNode {
  int label;
  ArrayList<DirectedGraphNode> neighbors;
  DirectedGraphNode(int x) {
    label = x;
    neighbors = new ArrayList<DirectedGraphNode>();
  }
}

无向图同上,只不过在建图时双向同时加。

Python

class UndirectedGraphNode:
  def __init__(self, x):
    self.label = x
    self.neighbors = []

Java

class UndirectedGraphNode {
  int label;
  ArrayList<UndirectedGraphNode> neighbors;
  UndirectedGraphNode(int x) {
    this.label = x;
    this.neighbors = new ArrayList<UndirectedGraphNode>();
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文