一、Floyd算法
首先是Floyd算法,这种算法思路是最简单的,但是相对于来说,时间复杂度就高一些,这种方法核心思想就是不断进行边松弛优化,主要代码如下;
void Floyd(vector<vector<int>> &adjucent, int n) { //adjucent是邻接矩阵,n是点个数
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
for (int k = 0; k < n; ++k) {
if (adjucent[j][k] > adjucent[j][i] + adjucent[i][k])
adjucent[j][k] = adjucent[j][i] + adjucent[i][k];
}
}
}
}
时间复杂为O(n^3),这种方法适合多源最短路径,如果对时间复杂度有要求,可以参考dijkstra算法
二、Dijkstra算法
Dijktra算法,时间复杂度为O(n^2),依靠邻接矩阵,单源最短路径算法,但是这里未进行优化
#define INF INT_MAX
//adjucent为邻接矩阵、n为点个数、begin为起点,dist保存begin到各个点的最短路径,visit记录是否访问
void Dijkstra(vector<vect