hiho_1089_floyd最短路
题目
floyd算法求所有顶点之间的最短路,典型的模板题。唯一需要注意的是两个顶点之间可能有多条边直接相连,在初始化的时候,直接选择最小的长度作为两点间的距离即可。
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include<iostream> #include<stdio.h> #include<algorithm> #include<unordered_map> #include<list> #include<string> #include<string.h> #include<set> using namespace std; int min_dist[105][105]; int main(){ int n, m, u, v, d; scanf( "%d %d" , &n, &m); memset(min_dist, 0x0F, sizeof (min_dist)); for ( int i = 1; i <= n; i++) min_dist[i][i] = 0; for ( int i = 0; i < m; i++){ scanf( "%d %d %d" , &u, &v, &d); if (min_dist[u][v] > d) //可能存在两个点之间有多条直接相连的边,取最小的那一条即可 min_dist[u][v] = min_dist[v][u] = d; } //floyd算法求最短路 for ( int k = 1; k <= n; k++){ for ( int i = 1; i <= n; i++){ for ( int j = 1; j <= n; j++){ if (min_dist[i][j] > min_dist[i][k] + min_dist[k][j]) min_dist[i][j] = min_dist[i][k] + min_dist[k][j]; } } } for ( int i = 1; i <= n; i++){ for ( int j = 1; j <= n; j++) printf( "%d " , min_dist[i][j]); printf( "\n" ); } return 0; } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步