dijkstra + spfa
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; #define INF 0x3f3f3f int cnt=0,head[INF],dis[INF]; int n,m; struct edge{ int v; int next; int w; }e[INF]; int add(int u,int v,int w){ e[++cnt].v = v; e[cnt].w = w; e[cnt].next = head[u]; head[u] = cnt; } struct node{ int d,u; bool operator <(const node &rhs) const { return d > rhs.d; } }; inline void dij(){ memset(dis,0x3f3f,sizeof(dis)); dis[1] = 0; priority_queue<node> q; q.push((node){1,0}); while(!q.empty()) { node fr = q.top(); q.pop(); int u = fr.u; int d = fr.d; if(d != dis[u]) continue; for(int i = head[u];i; i = e[i].next) { int v = e[i].v; int w = e[i].w; if(dis[u] + w < dis[v]) { dis[v] = dis[u] + w; q.push((node){v,dis[v]}); } } } } int main(){ scanf("%d%d",&n,&m); for(int i = 1;i <= m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); add(x,y,z); add(y,x,z); } dij(); printf("%d\n",dis[n]); return 0; }
spfa
int spfa(){ int che[INF],dis[INF]; memset(che,0,sizeof(che)); memset(dis,0x3f3f,sizeof(dis)); dis[1] = 0; che[1] = 1; queue<node> q; q.push((node){1,0}); while(!q.empty()) { node fr = q.front(); q.pop(); che[fr.u] = 0; int u = fr.u; int d = fr.d; for(int i=head[u];i;i=e[i].next) { int v = e[i].v; int w = e[i].w; if(dis[v] > dis[u] + w){ dis[v] = dis[u] + w; if(!che[v]){ che[v] = 1; q.push(v); } } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探