明知是最短路dijkstra算法的水题,还是wa了好多发。。。。有待练习
#include<iostream>
using namespace std;
#define INF 0x3f3f3f3f
int m,n,i,j,a,b,c;
int map[102][102];
int d[102];
int s[102];
void dij()
{
int v,max1;
for(i=1; i<=m; i++)
{
s[i]=0;
d[i]=map[1][i];
}
for(i=1; i<=m; i++)
{
max1=INF;
for(j=1; j<=m; j++)
{
if(d[j]<max1&&s[j]==0)
{
v=j;
max1=d[j];
}
}
s[v]=1;
for(j=1; j<=m; j++)
{
if(s[j]==0&&d[j]>d[v]+map[v][j])
d[j]=d[v]+map[v][j];
}
}
cout<<d[m]<<endl;
}
int main()
{
while(cin>>m>>n&&m!=0&&n!=0)
{
for(i=1; i<=m; i++)
{
for(j=1; j<=m; j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=map[j][i]=INF;
}
}
for(i=1; i<=n; i++)
{
cin>>a>>b>>c;
if(map[a][b]>c)
map[a][b]=map[b][a]=c;
}
dij();
}
}