题目链接:HDU 2544
分析:也是直接套Dijkstra的模板。
CODE:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxint=0x1f1f1f;
const int maxnum=110;
int dis[maxnum];
int c[maxnum][maxnum];
int n,m;
void Dijkstra(int n,int v,int *dis,int c[maxnum][maxnum])
{
int s[maxnum];
for(int i=1;i<=n;i++)
{
dis[i]=c[v][i];
s[i]=0;
}
dis[v]=0;
s[v]=1;
for(int i=1;i<n;i++)
{
int tmp=maxint;
int u=v;
for(int j=1;j<=n;j++)
{
if((!s[j])&&dis[j]<tmp)
{
u=j;
tmp=dis[j];
}
}
s[u]=1;
for(int j=1;j<=n;j++)
{
if((!s[j])&&c[u][j]<maxint)
{
dis[j]=min(dis[j],dis[u]+c[u][j]);
}
}
}
}
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
while(scanf("%d %d",&n,&m)!=EOF&&(n||m))
{
for(int i=1;i<=n;i++)
{
dis[i]=maxint;
for(int j=1;j<=n;j++)
c[i][j]=maxint;
}
int p,q,len;
for(int i=1;i<=m;i++)
{
cin>>p>>q>>len;
if(len<c[p][q])
{
c[p][q]=len;
c[q][p]=len;
}
}
Dijkstra(n,1,dis,c);
cout<<dis[n]<<endl;
}
return 0;
}