SPFA的两种优化SLF和LLL
来源:互联网 发布:碳微球 知乎 编辑:程序博客网 时间:2024/06/09 19:13
记录一个菜逼的成长。。
记下SPFA的两种优化,大牛请无视
SPFA算法有两个优化算法 SLF 和 LLL:
SLF:Small Label First 策略,设要加入的节点是j,队首元素为i,若dist(j) < dist(i),则将j插入队首,否则插入队尾。
LLL:Large Label Last 策略,设队首元素为i,每次弹出时进行判断,队列中所有dist值的平均值为x,若dist(i)>x则将i插入到队尾,查找下一元素,直到找到某一i使得dist(i)<=x,则将i出对进行松弛操作。
char str[maxn][maxn];int vis[maxn][maxn],dis[maxn][maxn],n,m;int ans[30],sum,cnt;int dx[] = {-1,-1,0,1,1,1,0,-1},dy[] = {0,1,1,1,0,-1,-1,-1};deque<PII>q;void spfa(){ while(!q.empty()){ PII f = q.front();q.pop_front(); //LLL优化 if(dis[f.fi][f.se] * cnt > sum){ q.push_back(f); continue; } sum -= dis[f.fi][f.se];cnt--; vis[f.fi][f.se] = 0; for( int i = 0; i < 8; i++ ){ int nx = f.fi + dx[i],ny = f.se + dy[i]; if(nx < 1 || nx > n || ny < 1 || ny > m)continue; int w = (str[nx][ny] != str[f.fi][f.se]); if(dis[nx][ny] > dis[f.fi][f.se] + w){ dis[nx][ny] = dis[f.fi][f.se] + w; if(!vis[nx][ny]){ vis[nx][ny] = 1; //SLF优化 if(dis[nx][ny] < dis[q.front().fi][q.front().se]){ q.push_front(mp(nx,ny)); } else { q.push_back(mp(nx,ny)); } sum += dis[nx][ny];cnt++; } } } }}void init(){ cl(dis,INF); cl(vis,0); cl(ans,INF); sum = cnt = 0;}
0 1
- SPFA的两种优化SLF和LLL
- SPFA的两种优化SLF和LLL
- spfa的SLF 和 LLL优化算法
- spfa优化 SLF LLL
- SPFA的SLF与LLL优化
- SPFA优化:SLF,LLL,前向星
- spfa 的 slf 优化
- 请柬(双向SPFA及SLF LLL优化法模板题)
- 算法提高 道路和航路 (SPFA的SLF优化)
- SPFA模板(SLF优化)
- [图论] SPFA + SLF优化
- SPFA,SLF优化
- spfa SLF优化
- 【日常学习】【SPFA+SLF+LLL】codevs1021 玛丽卡题解
- 2017.7.3 SPFA SLF优化
- hdu 1533 Going Home (zkw + spfa和slf优化)
- [SPFA的SLF优化] Codeforces Round #257 (Div. 1) B
- bzoj2100 [Usaco2010 Dec]Apple Delivery(slf优化的spfa)
- 微信抢红包的架构设计
- 三、JVM之对象的创建
- 数据库事务(二)
- POJ 3104 Drying
- hdu 5572
- SPFA的两种优化SLF和LLL
- 煤球问题
- 数据库事务(三)
- hdu 5528
- vue-lazyload基础实例(基于vue2.0和vue-router2.0)
- hdu 5492
- 把base64图片数据转为本地图片的函数
- java编程思想读书笔记
- linux无法发送邮件