题目大意是:有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 ",d[n]); return 0; }