最短路径(Dijkstra)

有一幅无向图图


对应的邻接矩阵
char *vertexArray[8] = {"a", "v1", "v2", "v3", "v4", "v5", "v6", "b"};
int undiGraph[8][8] = {
          //a,v1,v2,v3,v4,v5,v6, b
      //a  {X, 2, 8, 1, X, X, X, X},   //1+7+2+6
      //v1 {2, X, 6, X, 1, X, X, X},
      //v2 {8, 6, X, 7, 4, 2, 2, X},
      //v3 {1, X, 7, X, X, X, 9, X},
      //v4 {X, 1, 4, X, X, 3, X, 9},
      //v5 {X, X, 2, X, 3, X, 4, 6},
      //v6 {X, X, 2, 9, X, 4, X, 2},
      //b  {X, X, X, X, 9, 6, 2, X}
};

求从a到b的最短路径?


(使用“迪杰斯特拉算法”)解题过程:
1.先将“源顶点a”作为“轴心点”开始遍历所有可以抵达的“结点v1, v2, v3”,记录到达“结点v1, v2, v3”的路径值到对应的shortestPathsV[8] = {X(done), 2, 8, 1, X, X, X, X};
并且将“轴心点a”标记在flagV[8] = {1,0,0,0,0,0,0,0},标记为1后续不再使用此轴心点。
(注意:shortestPathsV[8]和flagV[8]每一项对应一个结点)


2.从shortestPathsV[8]中选择当前最短路径值"结点v3",遍历v3所有可以抵达的“结点v2, v6”,记录到达“v2, v6”的“路径值的和”到对应的shortestPathsV[8] =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值