最短路算法

详细见<知识整理>2019清北学堂提高储备D5

 

 

 

 

(弃坑)

 

1.Floyd-Warshall算法:解决任意两点间的最短路径的一种算法,时间复杂度O(n3)。

核心代码:

1 for(int k=1;k<=n;k++)
2         for(int i=1;i<=n;i++)
3             for(int j=1;j<=n;j++)
4                 if(d[i][j]>d[i][k]+d[k][j]) d[i][j]=d[i][k]+d[k][j];

2.Dijkstra(迪克斯特拉)算法:解决一点到其他所有点的最短路径,不能处理有负边权的图,时间复杂度O(n2)。

核心代码:

 1 for(int i=1;i<t;i++)
 2     {
 3         stt_dis=0x7fffffff,stt_node=0;
 4         for(int j=1;j<=t;j++)
 5         if(d[j]<stt_dis&&vis[j]==0)
 6         {
 7             stt_dis=d[j];
 8             stt_node=j;
 9         }
10         vis[stt_node]=1;
11         for(int j=1;j<=t;j++)
12         if(d[j]>stt_dis+ma[stt_node][j]&&vis[j]==0)
13             d[j]=stt_dis+ma[stt_node][j];
14     }

 

posted @ 2019-04-21 11:05  千叶繁华  阅读(165)  评论(0编辑  收藏  举报