与迪杰斯特拉相同的是spfa也是用来求单源点的最短路径问题,但是,当问题中的边是有向负边的时候,迪杰斯特拉就无能为力了,

而且给我的感觉是spfa如何结合STL来用的话代码比迪杰斯特拉的还要短一点,只是在思路上会比它稍微复杂一点点。spfa的原理:

同样设置一个数组d[maxn]用来保存源点到各点的距离,初始化为无穷打,同时定义一个队列que,初始化为空,然后还要定义一个数组visit[maxn],

用来标记当前的某个点是否在队列当中,初始化为false。算法第一步,把源点加入到队列中,然后用源点去更新源点到它可以到达的点的距离,

如果这个源点到这个点的距离可以被更新,而且队列中没有这个点的话,就把这个点加入到队列中。然后继续从队首弹出一个点,然后同理用这个点

去更新其它的点,重复下去直到队列为空,这时结果就出来了。下面是我A的第一个spfa的代码,用邻接表的,小小的纪念一下。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<deque>
using namespace std; typedef struct node
{
int d,len;
node *next;
}Linklist;
typedef struct Node
{
int tot;
Linklist *next;
Node()
{
tot = ;
next = NULL;
}
}linklist;
linklist rode[]; int d[],visit[];
void push(int u,int v,int l)
{
Linklist *q = new Linklist;
q->d = v;
q->len = l;
q->next = NULL;
rode[u].tot++;
if(rode[u].next == NULL)
{
rode[u].next = q;
return ;
}
Linklist *p = rode[u].next;
while(p->next)
p = p->next;
p->next = q;
} int main()
{
int n,m,u,v,l;
scanf("%d%d",&n,&m);
for(int i = ;i < m;++i)
{
scanf("%d%d%d",&u,&v,&l);
push(u,v,l);
}
deque<int> que;
deque<int>::iterator iter;
que.push_back();
memset(d,0x3f,sizeof(d));
memset(visit,,sizeof(visit));
visit[] = ;
d[] = ;
while(!que.empty())
{
int temp = *(que.begin());
que.pop_front();
visit[temp] = ;
Linklist *p = rode[temp].next;
while(p)
{
if(d[temp] + p->len < d[p->d])
{
d[p->d] = d[temp] + p->len;
if(!visit[p->d])
{
que.push_back(p->d);
visit[p->d] = ;
}
}
p = p->next;
}
}
for(int i = ;i <= n;++i)
printf("%d\n",d[i]);
return ;
}

最新文章

  1. ORACLE 11G EXPDP交互模式 interactive mode
  2. MySQL 中的 FOUND_ROWS() 与 ROW_COUNT() 函数
  3. 烂泥:kickstart无人值守安装CentOS6.5
  4. hdoj 1873 看病要排队【优先队列】
  5. hdu 3720 Arranging Your Team 枚举
  6. css——样式表分类,选择器
  7. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-10底层驱动之I2C
  8. tensorflow 在同一个GPU同时加载多张相同的图
  9. webpack 搭建vue项目流程
  10. sniffer 和 debug flow
  11. Openstack_通用模块_Oslo_vmware 创建 vCenter 虚拟机快照
  12. SQLite 客户端管理工具
  13. Iterable转List
  14. Ecliplse转IDEA的学习思路
  15. 【centos6.5】安装LNMP(linux公社)
  16. HDU 4642 Fliping game (2013多校4 1011 简单博弈)
  17. nested exception is java.net.UnknownHostException: mybatis.org异常处理
  18. Java设计模式-----装饰者
  19. Codeforces Round #324 (Div. 2) Olesya and Rodion 构造
  20. redis远程登录

热门文章

  1. 数据中心网络(1)-VXLAN
  2. 拓扑排序(Topological Sort)
  3. Bitcoin挖矿
  4. Vue.js 相关知识(动画)
  5. PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串
  6. oracle (+) 什么意思
  7. js分页实例
  8. github建仓库注意
  9. 查看iOS应用crash日志
  10. WORDPRESS修改文章文件后,出现乱码