有权图单源最短路径
int dist[w] = s到w的最短距离
int path[w] = s到w的路径经过的结点
memset(dist,/*正无穷*/,sizeof(dist));
memset(path,-1,sizeof(path));
void dijkstra(vertex s)
{
while(1)
{
v = //未收录的顶点中dist最小的
if( v 不存在)
{
break;
}
collect[v] = true; //将v收录
for( v 的所有邻接点 w)
{
if( collect[w] == false)
{
if(dist[v] + e<v,w> < dist[w])
{
dist[w] = dist[v] + e<v,w>; //e<v,w>表示w和v之间的距离
path[w] = v;
}
}
}
}
}
最短路径有多少条
count[s] = 1;
找到更短的路径:count[W] = count[V];
找到等长的路径:count[W] += count[V];
边数最少的最短路
count[s] = 0;
找到更短的路径:count[W] = count[V] + 1;
找到等长的路径:count[W] = count[V] + 1;