裸的算法:
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int N=205;
const
int min(int x,int y)
{
return x<y?x:y;
}
void work(int n,int m)
{
int i,j,k,a,b,x,s,t;
int f[N][N];
memset(f,0x3F,sizeof(f));
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&x);
if(x<f[a][b]) f[a][b]=f[b][a]=x;
}
for(i=0;i<n;i++) f[i][i]=0;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
scanf("%d%d",&s,&t);
if(f[s][t]>200005) printf("-1\n");
else printf("%d\n",f[s][t]);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
work(n,m);
return 0;
}
本文介绍了一种基于C++实现的最短路径算法,通过使用动态规划的思想来更新节点之间的最短距离。该算法适用于解决带权有向图中的最短路径问题,并能够有效地处理负权重边的情况。
255

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



