最短路问题(short-path problem)是网络理论解决的典型问题之一,可用来解决管路铺设、线路安装、厂区布局和设备更新等实际问题。基本内容是:若网络中的每条边都有一个数值(长度、成本、时间等),则找出两节点(通常是源节点和阱节点)之间总权和最小的路径就是最短路问题。(摘自百度百科)

  常见的最短路算法有floyd,dijkstra和spfa。

1.floyd

  floyd可以说是最暴力的最短路求法了,但其实floyd是用的动态规划的思想,只不过floyd可以求出任意2点之间的最短路,所以时间复杂度O(n^3)。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 int a[110][110];
 6 int x,y,v;
 7 int main()
 8 {
 9     int n,m;//n个点,m条边
10     memset(a,127/3,sizeof(a));
11     for(int i=1;i<=m;++i)
12     {
13         scanf("%d%d%d",&x,&y,&v);
14         a[x][y]=a[y][x]=v;//双向边 
15     }
16     for(int k=1;k<=n;++k)
17         for(int i=1;i<=n;++i) 
18             for(int j=1;j<=n;++j) 
19                 a[i][j]=min(a[i][k]+a[k][j],a[i][j]);//松弛操作
20     printf("%d",a[1][n]);
21     return 0; 
22 }
View Code

相关文章: