求最短路,套模板即可~
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define inf 0x7ffffff int w[1005][1005],v[1005],d[1005]; int t,n; int dijkstra(int s) { int p,minn; memset(v,0,sizeof(v)); for(int i=1;i<=n;i++) d[i]=inf; d[s]=0; for(int i=1;i<=n;i++) { minn=inf; for(int j=1;j<=n;j++) if(!v[j]&&d[j]<minn) { p=j; minn=d[j]; } v[p]=1; for(int j=1;j<=n;j++) { //cout<<p<<endl; if(!v[j]) d[j]=min(d[j],d[p]+w[p][j]); } } return d[n]; } int main() { while(scanf("%d%d",&t,&n)!=EOF) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) w[i][j]=inf; while(t--) { int x,y,z; scanf("%d%d%d",&x,&y,&z); w[x][y]=min(w[x][y],z); //考虑重边的情况 w[y][x]=w[x][y]; } int ans=dijkstra(1); printf("%d\n",ans); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/mowenwen_/article/details/46990097