/*
Dijkstra:和Prim一样思路,就是条件不再是当前最短,而是当前到start点最短,加上dis[i]=map[j][i]+dis[j]
*/
#include<iostream>
using namespace std;
#define N 101
#define INF 999999
int map[N][N];
int state[N];
int n;
int Dijkstra(int start,int end)
{
int min;
int i,j;
int dis[N];
dis[start]=0;
state[start]=1;
for(i=0;i<n;i++)
{
if(i!=start) dis[i]=map[start][i];
}
j=start;
while(j!=end)
{
min=INF;
for(i=0;i<n;i++)
{
if(state[i]==0&&dis[i]<min)
{
min=dis[i];
j=i;
}
}
if(min==INF) return -1;
state[j]=1;
for(i=0;i<n;i++)
{
if(state[i]==0&&map[j][i]+dis[j]<dis[i]) dis[i]=map[j][i]+dis[j];
}
}
return dis[end];
}
int main()
{
int m,l,i,j,k,d;
while(cin>>n>>m)
{
if(n==0&&m==0) break;
memset(map,999999,sizeof(map));
memset(state,0,sizeof(state));
for(i=0;i<m;i++)
{
cin>>j>>k>>l;
if(map[j-1][k-1]>=l)
{
map[j-1][k-1]=l;
map[k-1][j-1]=l;
}
}
d=Dijkstra(0,n-1);
cout<<p<<endl;
}
return 0;
}
最短路径Dijkstra算法模板
最新推荐文章于 2024-03-09 16:00:17 发布