本体我只想说说题意: 在给出的所有点中找到一个点,到所有点的时间最短,输出这个点,并输出最短距离,如果不连通, 则输出“disjoint” 由于题意没看明白, 错了好多次。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int M = 105;
const int inf = 99999999;
int dist[M][M];
int n;
void init(){
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
dist[i][j] = inf;
}
void floyd(){
int s;
int maxlenght = 0;
int maxn = inf;
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i != j && dist[i][j] > dist[i][k] + dist[k][j])
dist[i][j] = dist[i][k] + dist[k][j];
for(int i = 1; i <= n; i++){
maxlenght = 0;
for(int j= 1; j <= n; j++)
if(i != j && maxlenght < dist[i][j])
maxlenght = dist[i][j];
if(maxn > maxlenght){
maxn = maxlenght;
s = i;
}
}
if(maxn != inf)
printf("%d %d\n", s, maxn);
else
printf("disjoint\n");
}
int main()
{
int m , a, b;
while(scanf("%d", &n) != EOF){
if(!n)
break;
init();
for(int i = 1; i <= n; i++){
scanf("%d", &m);
for(int j = 0; j < m; j++){
scanf("%d%d", &a, &b);
dist[i][a] = b;
}
}
floyd();
}
return 0;
}
Floyd算法详解
本文介绍了一个使用Floyd算法解决寻找图中某一点到其他所有点最短路径的问题。该问题要求找出一个点,使得从该点出发到达图中任意其他点的距离总和最小。若图不连通则输出特殊标记。代码实现包括初始化距离矩阵和运行Floyd算法来更新最短路径。
944

被折叠的 条评论
为什么被折叠?



