最短路模版题
我用的dijkstra。
每个点每个点的更新。
AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 100000001
using namespace std;
int n,m;
bool vis[1001];
int d[1001],g[1001][1001];
int dijkstra(int o,int f)
{
int i,j,k,mind;
for(i=1;i<=n;i++)
d[i]=INF,vis[i]=0;
d[o]=0;
for(i=1;i<=n;i++)
{
mind=INF;
for(j=1,k=1;j<=n;j++)
{
if(!vis[j]&&d[j]<mind)
k=j,mind=d[j];
}
vis[k]=1;
for(j=1;j<=n;j++)
if(!vis[j]&&d[k]+g[k][j]<d[j]&&g[k][j]<INF)
d[j]=g[k][j]+d[k];
}
return d[f];
}
int main()
{
while(~scanf("%d%d",&m,&n))
{
int a,b,c;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
g[i][j]=INF;
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
g[a][b]=g[b][a]=min(g[a][b],c);
}
int tmp=dijkstra(1,n);
printf("%d\n",tmp);
}
}