dijkstra
原始版 h2o
#include<iostream>
#include<cstring>
#include<algorithm>
const int N=510;
int dista[N][N]; //用邻接矩阵存点与点间的距离
int dist[N] //存点到第一个点间的距离
bool st[N] //判是否已经搜过这个点
int n,m;
int dijkstra(int n)
{
memset(dist,0x3f,sizeof dist);//初始化所有点到第一个点的距离
dist[1]=0;//第一个点到第一个点距离是0
for(int i=0;i<n;i++)//遍历所有点
{
int t=-1;
for(int j=1;j<=n;j++)//find离点1距离最小且未检索过的点
if(!st[j]&&(t==-1||dist[t]>dist[j])
t=j;
st[t]=true;//更新状态
for(int j=1;j<=n;j++)//更新距离
dist[j]=min(dist[j],dist[t]+dista[t][j]);
}
if(dist[n]==0x3f3f3f3f) return -1;//不存在是返回-1
return dist[n];
}
检索是遍历所有点
时间复杂度O(n2)