dijkstra最短路
打 Div.3 发现两个最短路板子题一个用的 SPFA 一个用的邻接矩阵,赶紧补个。
#include <iostream>
#include <queue>
#define MAXN 20010
using namespace std;
const int inf = 2147483647;
int n,m,s,t,cnt;
int dis[MAXN],h[MAXN],to[MAXN],val[MAXN],nxt[MAXN];
bool vis[MAXN];
struct node {
int v,w;
friend bool operator < (node a,node b) {
return a.w > b.w;
}
} tmp;
priority_queue <node> q;
void add(int a,int b,int c) {
to[++cnt] = b;
val[cnt] = c;
nxt[cnt] = h[a];
h[a] = cnt;
}
void dijkstra() {
for(int i = 1;i <= n;++ i) dis[i] = inf;
dis[s] = 0;
tmp.v = s;tmp.w = 0;q.push(tmp);
while(!q.empty()) {
int u = q.top().v;
q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(int i = h[u];i;i = nxt[i]) {
if(dis[to[i]] > (long long)dis[u] + val[i]) {
dis[to[i]] = dis[u] + val[i];
tmp.w = dis[to[i]];
tmp.v = to[i];
q.push(tmp);
}
}
}
for(int i = 1;i <= n;++i)
cout <<dis[i] << ' ';
}
int main() {
cin >> n >> m >> s;
int u,v,w;
for(int i = 1;i <= m;++ i) {
cin >> u >> v >> w;
add(u,v,w);
}
dijkstra();
return 0;
}
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通