嘻嘻!
https://cn.vjudge.net/contest/323530#problem/A
show the code:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1005
using namespace std;
const int inf=0x3f3f3f3f;
int dis[maxn],vis[maxn];
int mp[maxn][maxn];
int n;
void init()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j)
mp[i][j]=0;
else
mp[i][j]=inf;
}
}
int djs(int st,int ed)
{
for(int i=1;i<=n;i++)
{
dis[i]=mp[st][i];
vis[i]=0;
}
vis[st]=1;
for(int i=1;i<n;i++)
{
int minn=inf;
int next=-1;
for(int j=1;j<=n;j++)
{
if(vis[j]==0&&dis[j]<minn)
{
minn=dis[j];
next=j;
}
}
if(next==-1) continue;
vis[next]=1;
for(int j=1;j<=n;j++)
{
if(vis[j]==0)
dis[j]=min(dis[j],dis[next]+mp[next][j]);
}
}
return dis[ed];
}
int main()
{
//无向图中边的个数为t,点的个数为n。
int t,a,b,x;
while(~scanf("%d%d",&t,&n))
{
memset(mp,inf,sizeof(mp));
while(t--)
{
scanf("%d%d%d",&a,&b,&x);//起点a,终点b,权值x。
mp[a][b]=min(x,mp[a][b]);//可以当板子丫!
mp[b][a]=min(x,mp[b][a]);
}
printf("%d\n",djs(1,n));
}
}