链接 : http://acm.hdu.edu.cn/showproblem.php?pid=2544
最短路,dijkstra写法跟Prim树好像。。。
#include <cstdio>
#include <cstring>
#define INF 0x3f3f3f3f
int map[101][101];
bool used[101];
using namespace std;
void dijk(int n)
{
int T=n;
used[1]=1;
while(T--)
{
int mini=INF,k;
for(int i=1;i<=n;i++)
if(!used[i] && map[1][i]<mini)
{
mini=map[1][i];
k=i;
}
used[k]=1;
for(int i=1;i<=n;i++)
if(!used[i] && map[1][i]>map[1][k]+map[k][i])
map[1][i]=map[1][k]+map[k][i];
}
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m),n+m)
{
memset(map,INF,sizeof(map));
while(m--)
{
int b,e,dis;
scanf("%d %d %d",&b,&e,&dis);
map[b][e]=map[e][b]=dis;
}
memset(used,0,sizeof(used));
dijk(n);
printf("%d\n",map[1][n]);
}
return 0;
}