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 }