<pre name="code" class="cpp">#include"iostream"
#include"stdio.h"
#include"algorithm"
#include"deque"
#include"queue"
#include"functional"
const int num=20;
const int inf=999999;
using namespace std;
void dijkstra(int n,int v,int *dist,int c[][num])
{
int s[num];
int i,j;
for(i=1;i<=n;i++)
{
dist[i]=c[v][i];
s[i]=0;
}
s[v]=1;
dist[v]=0;
for(i=0;i<n-1;i++)
{
int min=inf;
int u=v;
for(j=1;j<=n;j++)
{
if(!s[j]&&dist[j]<min)
{
min=dist[j];
u=j;
}
}
s[u]=1;
for(j=1;j<=n;j++)
{
if(!s[j]&&c[u][j]<inf)
if(c[u][j]+dist[u]<dist[j])
dist[j]=dist[u]+c[u][j];
}
}
}
int main()
{
freopen("a.txt","r",stdin);
int n,m;
while(cin>>n>>m&&n&&m)
{
int i,j;
int dist[num],c[num][num];
for(i=1;i<=num;i++)
{
for(j=1;j<=num;j++)
if(i==j) c[i][j]=0;
else c[i][j]=inf;
dist[i]=inf;
}
for(i=0;i<m;i++)
{
int s,t,len;
scanf("%d%d%d",&s,&t,&len);
if(len<c[s][t])
c[s][t]=c[t][s]=len;
}
dijkstra(n,1,dist,c);
cout<<dist[n]<<endl;
}
return 0;
}
<pre name="code" class="cpp">#include"iostream"
using namespace std;
const int vexnum=105;
const int maxl=999999;
void dijkstra(int n,int v,int *dist,int c[][vexnum])
{
int s[vexnum];
int i,j;for(i=1;i<=n;i++)
{
dist[i]=c[v][i];s[i]=0;
}
s[v]=1;
dist[v]=0;
for(i=2;i<=n;i++)
{
int temp=maxl;
int u=v;
for(j=1;j<=n;j++)
{
if(!s[j]&&dist[j]<temp)
{
u=j;temp=dist[j];
}
}
s[u]=1;
for(j=1;j<=n;j++)
{
if(!s[j]&&c[u][j]<maxl)
{
int newdist=dist[u]+c[u][j];
if(newdist<dist[j])dist[j]=newdist;
}
}
}
}
int main()
{
int dist[vexnum];
int c[vexnum][vexnum];
int n,m,s,t,len;
while(cin>>n>>m&&n&&m)
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
c[i][j]=maxl;
for(i=1;i<=n;i++)
dist[i]=maxl;
for(i=1;i<=m;i++)
{
cin>>s>>t>>len;
if(len<c[s][t]) //可以去掉但是放着也挺好
c[s][t]=c[t][s]=len;
}
dijkstra(n,1,dist,c);
cout<<dist[n]<<endl;
}
return 0;
}