博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPFA算法
阅读量:5314 次
发布时间:2019-06-14

本文共 1883 字,大约阅读时间需要 6 分钟。

提供两种spfa算法模板

1.链表储存:

1 /*--------------------------spfa链表储存*/  2 const int N = 10100 ; 3  4 struct Edge{ 5     int to,w,nxt; 6 }e[100010]; 7 int head[N],p; 8 int dis[N]; 9 bool vis[N];10 queue 
q;11 12 void spfa(int a) //a点到其他点的最短距离 13 {14 memset(dis,0x3f,sizeof(dis));15 vis[a] = true;16 q.push(a);17 dis[a] = 0;18 while(!q.empty())19 {20 int d = q.front();21 for(int i = head[d]; i ;i = e[i].nxt)22 {23 int w = e[i].w ,v = e[i].to;24 if(dis[d] + w < dis[v])25 {26 dis[v] = dis[d] + w;27 if(!vis[v])28 {29 q.push(v);30 vis[v] = true ; 31 }32 }33 }34 q.pop();35 vis[d] = false ;36 }37 }

2.数组储存

1 /*----------------------------------spfa数组储存*/  2 const int N = 1010 ; 3 int map[N][N]; 4 int dis[N]; 5 bool vis[N]; 6 int n; 7 queue 
q; 8 9 void spfa(int a)10 {11 memset(dis,0x3f,sizeof(dis));12 q.push(a);13 vis[a] = true;14 dis[a] = 0;15 while(!q.empty())16 {17 int d = q.front();18 for(int i=1;i<=n;++i)19 {20 if(map[d][i]!=0 && map[d][i]+dis[d] < dis[i])21 {22 dis[i] = dis[d] + map[d][i];23 if(!vis[i])24 {25 q.push(i);26 vis[i] = true; 27 }28 }29 }30 q.pop();31 vis[d] = false ; 32 }33 }

 

转载于:https://www.cnblogs.com/mjtcn/p/6832353.html

你可能感兴趣的文章
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
eclipse的调试方法的简单介绍
查看>>
加固linux
查看>>
IPSP问题
查看>>
10.17动手动脑
查看>>
WPF中Image显示本地图片
查看>>
Windows Phone 7你不知道的8件事
查看>>
实用拜占庭容错算法PBFT
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
Node 中异常收集与监控
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>
Java多线程基础(一)
查看>>