嘻嘻!
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 ",djs(1,n)); } }