题目:​​http://acm.hdu.edu.cn/showproblem.php?pid=2544​

#include <stdio.h>
#define INF 10000000
#define MAXN 200 //数组一定要开大........
int n,m;
int Edge[MAXN][MAXN];
int s[MAXN],dist[MAXN];
void Dijkstra(int v0)
{
int i,j,k;
for(i=1;i<=n;i++)
{
dist[i]=Edge[v0][i];
s[i]=0;
}
s[v0]=1;
dist[v0]=0;
for(i=0;i<n-1;i++)
{
int min=INF,u=v0;
for(j=1;j<=n;j++)
{
if(!s[j]&&dist[j]<min)
{
u=j;
min=dist[j];
}
}
s[u]=1;
for(k=1;k<=n;k++)
{
if(!s[k]&&Edge[u][k]<INF&&dist[u]+Edge[u][k]<dist[k])
{
dist[k]=dist[u]+Edge[u][k];
}
}
}
}
int main()
{
int i,j;
int u,v,w;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
Edge[i][j]=0;
else
Edge[i][j]=INF;
}
}
for(i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
Edge[u][v]=w;
Edge[v][u]=w;
}
Dijkstra(1);
printf("%d\n",dist[n]);
}
return 0;
}