Dijkstra-优先队列

本文深入探讨了Dijkstra算法在图论中的应用,重点解析了算法如何结合优先队列实现最短路径搜索。通过实例分析,阐述了优先队列在减少搜索时间复杂度上的关键作用,为读者提供了理解和实现Dijkstra算法的清晰路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

struct Edge {
	int from, to, dist;
	Edge (int _from, int _to, int _dist):from(_from), to(_to), dist(_dist){}
};
struct Dijkstra {
	struct node{
		int d, u;
		node (int _d, int _u):d(_d), u(_u){}
		bool operator < (const node& rhs) const {
			return d > rhs.d;
		} 
	};
	int n, m;
	vector <Edge> edges;
	vector <int> g[maxn];	// 节点 i 的第 j 条边在 edges 中的编号 
	bool vis[maxn];			//标志位
	int dis[maxn];
	int p[maxn]; 
	
	void init(int n)
	{
		this -> n = n;
		for(int i = 0;i <= n;i ++)
			g[i].clear();
		edges.clear();
	}
	
	void addEdge(int from, int to, int dist)
	{
		edges.push_back(Edge(from, to, dist));
		edges.push_back(Edge(to, from, dist));
		g[from].push_back(edges.size() - 2);
		g[to].push_back(edges.size() - 1);
	}
	int dijkstra(int s, int t) // 从 s --> t 的最短路 
	{
		priority_queue <node> q;
		for(int i = 0;i <= n;i ++)	
			dis[i] = INF;
		memset(vis, false, sizeof(vis));
		dis[s] = 0;
		q.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值