这是一个求图最短路径的算法,个人认为最好用也最有用的算法。
不扯那些高大上的,直接上代码
它的本质是DP
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
#define maxn 2005
using namespace std;
int dis[maxn][maxn];
int n,m,s;
int main(){
int u,v,w;
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)
dis[i][j]=INT_MAX>>1;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
if(u==v) continue;
dis[u][v]=min(w,dis[u][v]);
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
for(int i=1;i<=n;i++){
if(dis[s][i]>=INT_MAX>>1) dis[s][i]=INT_MAX;
printf("%d ",dis[s][i]);
}
}