最短路径算法
2021-02-11 01:20
标签:通过 初始化 顺序 fir else pre 最短路径算法 保存 i++ (1)多源最短路径 Floyd-Warshall 算法核心语句 for(k = 1;k
for(i= 1;i
for(j= 1;j
if(e[i][j]>e[i][k]+e[j][k]) ` e[i][j] = e[i][k]+e[j][k]; 例子中使用有向图来来储存边以及其权值 (2)Dijkstra算法,求一个顶点到其他顶点的最小距离 通过邻接表来实现 最短路径算法 标签:通过 初始化 顺序 fir else pre 最短路径算法 保存 i++ 原文地址:https://www.cnblogs.com/FutureSience/p/12740030.html 1 #include
1 int n,m,i;
2 int u[6],v[6],w[6];u,v,w,要比m的最大值要大一
3 int first[5],next[5];//first要比n的最大值要大一
4 scanf("%d %d",&n,&m);
5 for(i = 1;i )
6 first[i] = -1;//表示1-n点暂时没有边
7 for(i = 1;i )
8 {//first中的值可以理解为特定顶点的的第一条边的编号,也是该顶点最后一条读入的边
9 scanf("%d %d %d",&u[i],&v[i],&w[i]);//顶点就是读入的边的点,及u[i]
//下面两句是关键,怎样用邻接表来储存图
10 next[i] = first[u[i]];//first[u[i]]保存顶点u[i]的第一条边的编号,
11 first[u[i]] = i;//next[i]存储"编号为i的边"的下一条边
12 }//遍历某个顶点的边的顺序与读入边的顺序相反
13
14 k = first[1];
15 while(k != -1)
16 {
17 printf("%d %d %d",&u[k],&v[k],&w[k]);
18 k = next[k];
19 }//这里是再找到一号顶点的第一条边之后,剩下的边都可以在next数组中找到
20 for(i = 1;i //邻接表的遍历
21 {//遍历每一个顶点的边
22 k = first[i];
23 while(k != -1)
24 {
25 printf("%d %d %d",&u[k],&v[k],&w[k]);
26 k = next[k];
27 }
28 }
上一篇:Java:SPI机制
下一篇:整理css之BFC原理