求1-n的最短路径
#include<iostream>
#include<cstring>
#include<cstdio>
#define inf (1<<29)
using namespace std;
int n,m,ma[1050][1050],v[1050],d[1050];
void dijkstra(){
for(int i=1;i<=n;i++)
d[i]=ma[1][i];
int x;
for(int i=1;i<=n;i++){
int minn=inf;
for(int j=1;j<=n;j++)
if(v[j]==0&&d[j]<minn){
minn=d[j];
x=j;
}
v[x]=1;
for(int j=1;j<=n;j++)
if(v[j]==0&&d[j]>(ma[x][j]+d[x]))
d[j]=ma[x][j]+d[x];
}
printf("%d\n",d[n]);
return ;
}
int main(){
memset(v,0,sizeof(v));
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++){
ma[i][i]=0;
for(int j=i+1;j<=n;j++)
ma[i][j]=ma[j][i]=inf;
}
int x,y,z;
for(int i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&z);
if(ma[x][y]>z)//有重边
ma[x][y]=ma[y][x]=z;
}
dijkstra();
return 0;
}