dijkstra and spfa
spfa
struct Node{ int w,to,nxt; }edg[maxn]; int head[maxn],tot; void add_edge(int u,int w,int v){ edg[++tot].nxt=head[u];edg[tot].to=v; edg[tot].w=w;head[u]=tot; } bool vis[maxn]; int cnt[maxn],dis[maxn]; bool spfa(int n,int s){ memset(dis,0x3f,sizeof(dis)); memset(vis,0,sizeof(vis)); memset(cnt,0,sizeof(cnt)); queue<int>q; dis[s]=0,vis[s]=1; q.push(s); while(!q.empty()){ int u=q.front(); q.pop();vis[u]=0; for(int i=head[u];i;i=edg[i].nxt){ int v=edg[i].to,w=edg[i].w; if(dis[v]>dis[u]+w){ dis[v]=dis[u]+w; cnt[v]=cnt[u]+1; if(cnt[v]>=n)return false; if(!vis[v])q.push(v),vis[v]=1; } } } return true; }
dijkstra
#include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define fi first #define se second #define mkp make_pair #define int long long const int maxn=3e5+10; vector<pii>E[maxn]; int dis[maxn]; bool vis[maxn]; struct node{ int dis,pos; bool operator< (const node &x)const{ return x.dis<dis; } }; void dijkstra(int s){ priority_queue<node>q; dis[s]=0; q.push((node{0,s})); while(!q.empty()){ int u=q.top().pos; q.pop(); if(vis[u])continue; vis[u]=1; for(pii i:E[u]){ int v=i.fi,w=i.se; if(dis[v]>dis[u]+w){ dis[v]=dis[u]+w; q.push((node){dis[v],v}); } } } } void solve(){ int m,n,s;cin>>n>>m>>s; for(int i=1;i<=n;i++)dis[i]=0x3f3f3f3f; while(m--){ int u,v,w; cin>>u>>v>>w; E[u].push_back(mkp(v,w)); } dijkstra(s); for(int i=1;i<=n;i++)cout<<dis[i]<<' '; } signed main(){ int t;t=1;while(t--){ solve(); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】