了解邻接矩阵

    在本教程中,您将学习什么是邻接矩阵。此外,您还将在C中找到邻接矩阵的示例。
    邻接矩阵是将图G={V,E}表示为布尔矩阵的一种方法。

邻接矩阵表示法

    矩阵的大小是 VxV,其中 V 是图的顶点数,根据顶点 i 到顶点 j 是否有边,条目 Aij 的值为1或0。

邻接矩阵示例

    下图显示了一个图形及其等效的邻接矩阵。
在这里插入图片描述
    对于无向图,由于每一条边(i,j)的存在,矩阵关于对角线对称,因此也有一条边(j,i)。

邻接矩阵的优点

    添加边、删除边以及检查从顶点 i 到顶点 j 是否有边等基本操作都是非常省时的常规操作。
    如果图是密集的,且边的数目较大,则邻接矩阵是首选。即使图和邻接矩阵是稀疏的,我们也可以用稀疏矩阵的数据结构来表示它。
    图的最大的优势来自于矩阵的使用。硬件的最新发展使我们能够在GPU上执行代价很大的矩阵运算。
    通过对邻接矩阵进行运算,我们可以深入了解图的性质及其顶点之间的关系。

邻接矩阵的缺点

    邻接矩阵的 VxV 空间要求使它占用很多内存。自然的图通常没有太多连接,这就是为什么邻接列表是大多数任务的更好选择的主要原因。
    虽然基本操作很简单,但在使用邻接矩阵表示时,像增加边和删除边这样的操作代价很大。

C示例

    如果您知道如何创建二维数组,那么您也知道如何创建邻接矩阵。

// Adjacency Matrix representation in C

#include <stdio.h>
#define V 4

// Initialize the matrix to zero
void init(int arr[][V]) {
  int i, j;
  for (i = 0; i < V; i++)
    for (j = 0; j < V; j++)
      arr[i][j] = 0;
}

// Add edges
void addEdge(int arr[][V], int i, int j) {
  arr[i][j] = 1;
  arr[j][i] = 1;
}

// Print the matrix
void printAdjMatrix(int arr[][V]) {
  int i, j;

  for (i = 0; i < V; i++) {
    printf("%d: ", i);
    for (j = 0; j < V; j++) {
      printf("%d ", arr[i][j]);
    }
    printf("\n");
  }
}

int main() {
  int adjMatrix[V][V];

  init(adjMatrix);
  addEdge(adjMatrix, 0, 1);
  addEdge(adjMatrix, 0, 2);
  addEdge(adjMatrix, 1, 2);
  addEdge(adjMatrix, 2, 0);
  addEdge(adjMatrix, 2, 3);

  printAdjMatrix(adjMatrix);

  return 0;
}
邻接矩阵应用
  • 在网络中创建路由表
  • 导航任务
参考文档

[1]Parewa Labs Pvt. Ltd.Adjacency Matrix[EB/OL].https://www.programiz.com/dsa/graph-adjacency-matrix,2020-01-01.

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值