LeetCode刷题--- Dijkstra 求最短路径

文章介绍了邻接矩阵和邻接表在图的表示方法中各自的适用场景,以及如何使用它们来实现求解最短路径的算法。重点讨论了无向图和有向图的表示,并提供了Java代码示例。最后提到使用优先级队列优化BFS搜索过程以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是图的表示,邻接矩阵和邻接表。实现看代码

  • 邻接矩阵:二维数组,
    • matrix[a][b] 表示 从a可以指向b
    • 无向图而言, matrix[a][b]=matrix[b][a],比如可以定义matrix[a][b]=1表示ab是连接的,matrix[a][b]=0表示ab是不可连接的
    • 有向图:matrix[a][b]=x,表示从a到b的权是x,如果matrix[a][b]=无穷大,表示ab是不可连接的
  • 邻接表:
    • 外层是一个数组,数组长度表示图中有多少个节点,数组下标对应节点a
    • 每个数组中,存放一个链表,链表的每个节点也是数组
      • 链表长度代表从a可以直接指向多少个节点
      • 链表元素树一个数组,数组第一个元素代表被执向的b,第二个元素代表a到b的权

个人感觉,邻接矩阵适合无向图,邻接表适合有向图。

/**
 * 邻接矩阵
 *
 * @param n 初始化图中节点的个数
 * @param edges edges边,从edge[0]指向edge[1],路径长度为edge[2]
 * @return matrix
 */
public int[][] adjacentMatrix(int n, int[][] edges) {
    // 邻接矩阵就是一个二维数组,很好理解,对应坐标的值是路径长度
    int[][] matrix = new int[n][n];

    for (int[] edge : edges
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值