传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544
解题思路:题意已经非常明显了,这道题用来检测自己对最短路的理解和代码的熟悉程度,早起热身,一次AC。现在看来属于很水的题。
代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000;
const int INF=9999999;
int n,m;
int map[maxn][maxn],dist[maxn];
void dijkstra(int s,int e)
{
int visit[maxn];
int i,j,k;
int pos;
memset(visit,0,sizeof(visit));
visit[s]=1;
for(i=1;i<=n;i++) dist[i]=map[s][i];
for(i=1;i<=n;i++)
{
int min=INF;
for(j=1;j<=n;j++)
{
if(!visit[j]&&dist[j]<min)
{
pos=j;
min=dist[j];
}
}
visit[pos]=1;
for(j=1;j<=n;j++)
{
if(!visit[j]&&map[pos][j]!=INF)
{
int newdist=dist[pos]+map[pos][j];
if(newdist<dist[j]) dist[j]=newdist;
}
}
}
}
int main(void)
{
int i,j,k;
int a,b,c;
int s,e;
while(cin>>n>>m)
{
if(n==0||m==0) break;
//首先要对图进行初始化
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=INF;
for(i=0;i<m;i++)
{
cin>>a>>b>>c;
if(c<map[a][b])
map[a][b]=map[b][a]=c;
}
dijkstra(1,n);
cout<<dist[n]<<endl;
}
}