首页 > 代码库 > Floyd算法模板
Floyd算法模板
Floyd可以求出任意两点间的最短距离,代码也相对简单,对于稀疏图来说效率也还是不错的,但由于三个for循环导致时间复杂度较高,不适合稠密图。
Floyd算法模板(精简版):
void Floyd() { int dist[maxn][maxn]; // dist存储i到j的最短距离 for(int k = 1; k <= n; k++) for(int i = 1;i <= n; i++) for(int j = 1; j <= n; j++) if(dist[i][k] + dist[k][j] < dist[i][j]) dist[i][j] = dist[i][k] + dist[k][j]; // 不断更新最短距离 }
记录最短路径模板:
void floyd() { for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) { dist[i][j] = map[i][j], path[i][j] = 0; } for(int k = 1; k <= n; k++) for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) if(dist[i][k] + dist[k][j] < dist[i][j]) { dist[i][j] = dist[i][k] + dist[k][j]; path[i][j] = k; // path记录路径中的最大点 } } void output(int i,int j) // 用递归的方式输出路径,i是起点,j是终点 { if(i == j) return; if(path[i][j] == 0) cout<<j<<' '; else { output(i,path[i][j]); output(path[i][j],j); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。