【模板】 Floyd, Dijkstra, SPFA
| |
| inline void Floyd(){ |
| memset(dis,0x3f,sizeof(dis)); |
| for(int k = 1;k<=N;k++){ |
| for(int i = 1;i<=N;i++){ |
| for(int j = 1;j<=N;j++){ |
| dis[i][j] = min(dis[i][k]+dis[k][j],dis[i][j]); |
| } |
| } |
| } |
| } |
| |
| struct Node{ |
| int dis,pos; |
| friend bool operator < (Node A,Node B){ |
| return A.dis > B.dis; |
| } |
| Node(int d,int p) : dis(d) , pos(p) {}; |
| }; |
| |
| priority_queue<Node> Q; |
| int dis[maxN]; |
| int vis[maxN]; |
| |
| inline void Dijkstra(int u){ |
| memset(dis,0x3f,sizeof(dis)); |
| memset(vis,0,sizeof(vis)); |
| |
| dis[u] = 0; |
| vis[u] = 1; |
| Q.push(Node(0,u)); |
| |
| while(!Q.empty()){ |
| int pos = Q.top().pos; |
| Q.pop(); |
| |
| for(int i = head[pos];i;i = edge[i].nxt){ |
| int to = edge[i].to; |
| int wei = edge[i].w; |
| if(dis[to] > dis[pos] + wei){ |
| dis[to] = dis[pos] + wei; |
| if(!vis[to]) Q.push(Node(dis[to],to)); |
| } |
| } |
| } |
| } |
| |
| inline void SPFA(int u){ |
| memset(dis,0x3f,sizeof(dis)); |
| memset(vis,0,sizeof(vis)); |
| |
| queue<int>Q; |
| |
| Q.push(u); |
| vis[u] = 1; |
| dis[u] = 0; |
| |
| while(!Q.empty()){ |
| int id = Q.front(); |
| Q.pop(); |
| vis[id] = 0; |
| for(int i = head[id]; i; i = edge[i].nxt) { |
| int to = edge[i].to; |
| if(dis[to] > dis[id] + edge[i].w) { |
| dis[to] = dis[id] + edge[i].w; |
| if(!vis[to]) { |
| Q.push(to); |
| vis[to] = 1; |
| } |
| } |
| } |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库