1. Para las preguntas de la plantilla del algoritmo de Dijkstra, aplique la plantilla directamente.
2. Considere el caso de aristas repetidas.
3. La inicialización de la matriz map_ es incorrecta, lo que conduce a un tiempo de espera.
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define MAX 110
#define INF 0x3f3f3f3
int map_[MAX][MAX];
int dis[MAX];
int vis[MAX];
int n,m;
int dijkstra()
{
int min_,v;
for(int i=1;i<=n;i++)
{
dis[i]=map_[1][i];
//printf("dis[%d]=%d\n",i,dis[i]);
vis[i]=0;
}
for(int i=1;i<n;i++)
{
min_=INF;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<min_)
{
min_=dis[j];
v=j;
}
}
vis[v]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]>dis[v]+map_[v][j])
{
dis[j]=dis[v]+map_[v][j];
}
}
}
return dis[n];
}
int main()
{
int a,b,c;
while(scanf("%d%d",&n,&m)==2)
{
if(n==0&&m==0)
{
return 0;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
{
map_[i][j]=0;
}
else
{
map_[i][j]=INF;
}
}
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(map_[a][b]>c)
{
map_[a][b]=map_[b][a]=c;
}
}
printf("%d\n",dijkstra());
}
return 0;
}