题目大意是:有N个牛棚和T条边相连,每条边有个权值,问1号到N号牛棚之间的最短距离
本题是又是DIJKSTRA最短路水题,注意任何两个牛棚之间可能有多条路相连,输入时先输入边,再输入点,程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int maxn=1010,maxint=1000000000;
int a[maxn][maxn],d[maxn],p[maxn];
int main(){int i,j,k,l,m,n;int x,y,z;scanf("%d%d",&m,&n);for(i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z); if(!a[x][y]){a[x][y]=z;a[y][x]=z; }else{a[x][y]=a[x][y]<z?a[x][y]:z;a[y][x]=a[y][x]<z?a[y][x]:z; } }for(i=1;i<=n;i++)d[i]=maxint;d[1]=0;int mind;for(i=1;i<=n;i++){mind=maxint;for(j=1;j<=n;j++)if(!p[j] && d[j]<mind){mind=d[j];k=j; }p[k]=1; for(j=1;j<=n;j++)if(!p[j] && a[k][j] && d[j]>d[k]+a[k][j])d[j]=d[k]+a[k][j]; } printf("%d\n",d[n]);return 0;
}