dijkstra算法:
核心:
searchroot = (!visit[j]) && min(minpath[j])
//搜索节点为最短路径里面未被访问过的最小距离点
minpath[j] = min{minpath[searchroot]+map[searchroot][j],minpath[j]}
//最短路径为当前已知路径与搜索路径已知最短路径到当前结点的距离的最小值
设有 a,b,c,d,e 点, 另 最短路径为minint 初始化为MAX , 令起点为a 标记起点 令其处于已访问状态(找寻最小值的循环只需 a to e -1 次),
其中算法表示为:
for i = b to e
for j = a to e
if !visit[j] && minpath[j] < minint
minint = minpath[j]
searchroot = j
visit[searchroot]=1
for j = a to e
if !visit[j] && minpath[j] > minpath[searchroot] + map[searchroot][j]
minpath[j] = minpath[searchroot] + map[searchroot][j]
注:MAX 为无穷大,按邻接矩阵表示 自身到自身为 0 无法到达为 MAX
const int size=9;
const int MAX=1000000;
int minpath[size];
int visit[size];
int father[size];
int map[size][size]={
{ 0,4,MAX,MAX,MAX,MAX,MAX,8,MAX },
{ 4,0,8,MAX,MAX,MAX,MAX,11,MAX },
{ MAX,8,0,7,MAX,4,MAX,MAX,2 },
{ MAX,MAX,7,0,9,14,MAX,MAX,MAX },
{ MAX,MAX,MAX,9,0,10,MAX,MAX,MAX },
{ MAX,MAX,4,14,10,0,2,MAX,MAX },
{ MAX,MAX,MAX,MAX,MAX,2,0,1,6 },
{ 8,11,MAX,MAX,MAX,MAX,1,0,7 },
{ MAX,MAX,2,MAX,MAX,MAX,6,7,0 }
};
int root=0;
for(int i=0;iminpath[searchroot]+map[searchroot][j])
{
minpath[j]=minpath[searchroot]+map[searchroot][j];
father[j]=searchroot;
}
}
}
for(int i=1;i
dijkstra核心:找离起点最近点搜索。