首页 > 代码库 > Dijkstra + heap
Dijkstra + heap
用优先队列实现,和朴素Dijkstra差不多,核心思想没有改变。
模板:
struct node { int pos, dist; friend bool operator < (node a, node b) // 定义优先级 { return a.dist > b.dist; // 小的先出 } }; int Dijkstra(int n,int start,int end) // n个点,定义起点和终点 { bool visited[maxn]; int pos; node tmp; tmp.pos = start; tmp.dist = 0; priority_queue<node> q; for(int i = 1; i <= n; i++) { visited[i] = 0; dist[i] = INF; } dist[start]= 0; q.push(tmp); // 将起点插入队列 while(!q.empty()) { tmp = q.top(); q.pop(); pos = tmp.pos; if(tmp.dist == INF) // 没有边直接返回 return INF; if(visited[pos]) continue; visited[pos] = 1; for(int i = 1; i <= n; i++) if(!visited[i] && tmp.dist + map[pos][i] < dist[i]) { dist[i] = tmp.dist + map[pos][i]; node t; t.pos = i; t.dist = dist[i]; q.push(t); // 将更新后的边插入队列 } } return dist[end]; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。