1、无权图最短路径算法
BFS思路
使用队列一圈圈的搜索
void BFS(Vertex S)
{visited[S]=true;
Enqueue(S,Q);
while(!IsEmpty(Q))
{V=Dequeue(Q);
for(V的每个邻接点W)
if(!visited[W]=true;
Enqueue(W,Q);
}
}
}
void Unweighted(Vertex S)//Vertex S是顶点
{Enqueue(S,Q);
while(!IsEmpty(Q))
{V=Dequeue(Q);
for(V的每个邻接点W)
if(dist[W]==-1)//如果这个W没被访问过
{dist[W]=dist[V]+1;
path[W]=V;//记录最短路径
Enqueue(W,q);
}
}
}
2、有权图单源最短路径算法
DIJ
模板
void dij(int s) //s是顶点
{while(1)
{int min=inf,v=-1;
int w;
for(int i=0;i<n;i++) //找出最小的dist
{if(!vis[i]&&dist[i]<min)
{min=dist[i];
v=i;
}
}
if(v==-1)break; //如果vis都是true 退出
vis[v]=true;
for(w=0;w<n;w++)
{if(!vis[w]&&dist[v]+way[v][w]<dist[w]) //遍历w的每个邻接点
dist[w]=dist[v]+way[v][w];
}
}
}