dijkstra堆优化

_谦言万语 _谦言万语 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <bits/stdc++.h>
#define MOD 10000000007
#define INF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int maxn=1000005;
int n,m,s;
//e存终点,w存权值,h存表头,next存下一个点(h和next形成了链表)
int idx,e[maxn],w[maxn],h[maxn],ne[maxn];
int dis[maxn],vis[maxn];//距离,标记

struct Node {
	int dis,x;//距离和当前点
	//重载运算符(将小于改为大于)
	bool operator < (Node p) const {
		return dis > p.dis;
	}
	Node(int dis,int x):dis(dis),x(x) {}
};

//邻接表
void add(int a,int b,int c) {
	e[idx]=b;
	w[idx]=c;
	ne[idx]=h[a];
	h[a]=idx++;
}

void dijkstra() {
	memset(dis,INF,sizeof(dis));//初始化
	priority_queue<Node> q;
	dis[s]=0;
	Node u(dis[s],s);
	q.push(u);
	while(!q.empty()) {
		Node u=q.top ();
		q.pop();
		if(vis[u.x]) continue;
		vis[u.x]=1;
		for(int i=h[u.x]; i!=-1; i=ne[i]) {
			if(dis[e[i]] > dis[u.x] + w[i]) {
				dis[e[i]] = dis[u.x] + w[i];
				Node v(dis[e[i]],e[i]);
				q.push(v);
			}
		}
	}
}

int main() {
	memset(h,-1,sizeof(h));//
	cin>>n>>m>>s;
	for(int i=1; i<=m; i++) {
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c);
	}

	dijkstra();

	for(int i=1; i<=n; i++) {
		if(dis[i]==INF) cout<<"2147483647 ";
		else cout<<dis[i]<<" ";
	}
	return 0;
}

 

...全文

相关推荐

堆优化的dijkstra算法(dijkstra+邻接表+heap)

在处理大规模数据时,原始的Dijkstra算法的时间复杂度较高,通常采用优先队列进行优化,即堆优化的Dijkstra算法。

rectaflex

Dijkstra算法及堆优化

1.有向无环图的单源点最短路 其实跟之前说的最长路是一样的 思路:广搜(拓扑排序)+ DP 如下图所示: 2.一般图的单源点最短路 Dijkstra(迪杰斯特拉)算法 算法思路:每次找离起点最近的那个点,确认它的最短路径值(这个点的最短路必须已经确认了),拿这个点去更新与它相邻的点,不断重复这个操作,从离起点的距离一点一点扩展开,有种贪心+bfs的感觉 举个栗子 说说用Dijkstra求最短路的过程 一开始将所有点到原点的距离设置为正无穷,从1号点出发,更新2号,4号,6号点到原点的距离,dis[2]=

Wpiper

堆优化dijkstra.cpp

堆优化dijkstra算法。使用邻接表。邻接表的应用案例。Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为

Mr_白驹

堆优化dijkstra代码模板示例

dijkstra时间优化,堆优化,优先队列,最短路算法,O(NlogN)空间时间优化,链式存储,邻接表存图,NOIP,ACM算法竞赛,数据结构

itselaineZ

堆优化的Dijkstra算法

打开链接下载源码: https://pan.quark.cn/s/794a17055f6d ### 堆辅助的Dijkstra算法(Dijkstra+邻接表+Heap)#### 算法概述Dijk

2601_95675525
评论
收藏 已收藏
分享
返回顶部