首页 > 编程知识 正文

LOD算法用到顶点索引吗,无向图顶点的度数算法

时间:2023-05-05 22:59:12 阅读:110158 作者:4471

1 .问题

用Floyd算法求出下图各顶点的最短距离,用最短距离矩阵表示

用压铸法求出从顶点a到顶点h的最短路径

2 .分析

浮动算法:

将图变换为邻接矩阵(主对角线,也就是从自己到自己的距离为0,设定为不无限大,设定为10000 )。

按编号1、2、3、4的顺序选择的点为中间点m,(以1为例); 如果判断[map[ i ][ 1 ] map[ 1 ][ j ]]map[ i ][ j ]表达式为真,则将map[I][j]的值更新为map[I][1]map[1][j]。

不断更新,最终结果矩阵是任意两点之间的最短距离矩阵。

Dijkstra算法:

Dijkstra是要求单源最短路的算法,也是解决不具有负权的问题的图。 首先,将图转换为邻接矩阵map,定义存储距离的数组distance和存储状态的visited数组。 在从A到B的距离最短的情况下,A通过B到B的点的距离也最短的戴克斯特拉的想法是这样每次找到离A最近的B,将B添加到集合A中,记录从源到B的距离,这是从源到B的最短的短路。 每次判断并更新距离时,所有最后一个顶点中的距离值将变为最短距离,直到包含继续查找b的下一个顶点。

3 .设计

浮动算法:

for (将每个点作为中介点) )。

{

for (扫描矩阵的各点) ) )。

{

for (扫描矩阵的各点) ) )。

{

if )比较矩阵的这一点和连接中点的点之间的距离) ) ) ) ) ) ) ) if ) ) ) if ) ) 652 ) 652 )

{

g.map [ I ] [ j ]=g.map [ I ] [ m ] g.map [ m ] [ j ]; //如果是真的话更新

}

}

}

}

Dijkstra算法:

for(intI=1; i=G.vexs - 1; I )

{

int minn=10000;

int temp=v;

for (寻找最短距离点的遍历) ) ) ) ) ) )。

{

if )如果此点的距离较短且未被访问,则更新最短距离) )。

{

minn=distance[j];

temp=j;

}

}

visited[temp]=1;

for(intI=1; i=G.vexs; I )

{

if (比较该点的总距离和找到的最短距离之间的总距离) ) )。

distance [ I ]=distance [ temp ] g.map [ temp ] [ I ]; //如果是真的话更新

}

}

4 .分析

算法中的三个for环,时间复杂度为o(n^3);

Dijkstra算法的时间复杂度为o(n^2);

5 .源代码

33559 github.com/marvi SSS/- floyed-Dijkstra-/tree/main

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。