2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3 2
Accepted | 2544 | 0MS | 308K | 1073 B | C++ |
#include<stdio.h>
void Dij(int star,int end,int *dis,int map[][101])
{
bool *flag=new bool[end+1];
int min=0x3fffffff;
int jiaoma;
for(int i=1;i<=end;i++)
{
dis[i]=map[star][i];
flag[i]=true;
}
flag[star]=false;
dis[star]=0;
for(int k=2;k<=end;k++)
{
min=0x3fffffff;
for(int j=1;j<=end;j++)
{
if(flag[j]&&dis[j]<min)
{
min=dis[j];
jiaoma=j;
}
}
flag[jiaoma]=false;
for(int i=1;i<=end;i++)
{
if(flag[i]&&map[jiaoma][i]<0x3fffffff)
{
int newdis=dis[jiaoma]+map[jiaoma][i];
if(newdis<dis[i])
dis[i]=newdis;
}
}
}
}
void chushihua(int map[][101],int N)
{
for(int i=1;i<=N;i++)
for(int j=i;j<=N;j++)
map[j][i]=map[i][j]=0x3fffffff;
}
int main()
{
int N,M,A,B,C;
int map[101][101];
int dis[102];
while(scanf("%d%d",&N,&M),N||M)
{
chushihua(map,N);
for(int i=1;i<=M;i++)
{
scanf("%d%d%d",&A,&B,&C);
if(C<map[A][B])
{map[B][A]=map[A][B]=C;}
}
Dij(1,N,dis,map);
printf("%d\n",dis[N]);
}
}