C++实现双向Dijkstra算法——寻找最短路径
Dijkstra算法是图论中常用的一种算法,用来解决带权有向图的单源最短路径问题。然而,在实际应用中,算法的效率并不理想,因为它需要对所有的边进行遍历。于是,人们提出了各种优化算法,其中双向Dijkstra算法便是其中之一。
双向Dijkstra算法是一种从起点和终点同时进行搜索的双向搜索算法。它可以大大减少搜索时间,相比传统的Dijkstra算法,在某些情况下可以将搜索时间缩短至原来的1/3。下面我们来看一下C++实现双向Dijkstra算法的代码实现。
代码实现:
const int INF = 0x3f3f3f3f;
const int MAXN = 10005;
struct node {
int v, w; //v:点的编号,w:到该点的距离
};
vector<node> edge[MAXN];
int dis1[MAXN], dis2[MAXN], vis1[MAXN], vis2[MAXN];
void Dijkstra(int s, int *dis, int *vis) {
memset(dis, INF, sizeof(dis1)); //将所有点的距离初始化为INF
memset(vis, 0, sizeof(vis1)); //起点未被访问过
pr