简单floyd
#include<iostream>
#include<cstdio>#include<string.h>
#include<string>
#include<set>
#include<algorithm>
#include<cmath>
#define ll __int64
#define MAX 1000009
using namespace std;
int dp[1009][1009];
int aa[MAX];
int bb[MAX];
int main()
{
int x,y,z;
int a,b,c;
while(cin>>x>>y>>z)
{
for(int i = 1; i<=1000; i++)
{
for(int j = 1; j<=1000; j++)
{
if(i==j)
dp[i][i] = 0;
else
dp[i][j] = MAX;
}
}
int _max = -MAX;
for(int i = 0; i<x; i++)
{
cin>>a>>b>>c;
_max = max(_max,max(a,b));
if(dp[a][b]>c)
{
dp[a][b] = dp[b][a] = c;
}
}
for(int k = 1; k<=_max; k++)
{
for(int i = 1; i<=_max; i++)
{
if(dp[k][i]==MAX)continue;//有个小处理,如果k-i不存在,就不用判断了
for(int j = 1; j<=_max; j++)
{
dp[i][j] = min(dp[i][j],dp[i][k]+dp[k][j]);
}
}
}
for(int i = 0; i<y; i++)
cin>>aa[i];
for(int j = 0; j<z; j++)
cin>>bb[j];
int _min = MAX;
for(int i = 0; i<y; i++)
{
for(int j = 0; j<z; j++)
{
_min = min(_min,dp[aa[i]][bb[j]]);
}
}
cout<<_min<<endl;
}
return 0;
}
本文介绍了一个简单的Floyd算法实现过程,该算法用于解决任意两点之间的最短路径问题。通过初始化距离矩阵并逐步更新以获得最终的最短路径,适用于解决图论中的经典问题。
937

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



