终于想到spfa的好处了,首先要比dij快啊!!dij是所有点汤一遍,而spfa用链表有方向的,还有dij遇见负权边就完了

dijkstra 不能有负权边,否则结果是错的,你想想,假如无向图有1,2,3个点,w(1,2)=1,w(1,3)=2,w(2,3)=-2. 按dij算法求求看。
 
实现方法:建立一个队列,初始时队列里只有起始点,在建立一个表格记录起始点到所有点的最短路径(该表格的初始值要赋为极大值,该点到他本身的路径赋为0)。然后执行松弛操作,用队列里有的点去刷新起始点到所有点的最短路,如果刷新成功且被刷新点不在队列中则把该点加入到队列最后。重复执行直到队列为空
判断有无负环:如果某个点进入队列的次数超过N次则存在负环
存在负权回路的图是不能求两点间最短路的,因为只要在负权回路上不断兜圈子,所得的最短路长度可以任意小。

#include<iostream>
using namespace std;
#include<algorithm>
#include<queue>
#define N 10005
#define inf 0x7FFFFF
struct node
{
int u;
int c;
int next;
}e[N];
int d[N],p[N];
bool vis[N];
int spfa(int s)
{
d[s]=0;
//  vis[s]=true;
queue<int>q;
q.push(s);
while(!q.empty())
{
int t=q.front();
q.pop();
vis[t]=false;
for(int j=p[t];j!=-1;j=e[j].next)//这是想大于有方向的爬树,比dij快多了
{
int w=e[j].c;
int temp=e[j].u;
if(w+d[t]<d[temp])
{
d[temp]=w+d[t];
if(!vis[temp]) //防止出现环,也就是进队列重复了
{
vis[temp]=true;
q.push(temp);
}
}
}
}
}
int main()
{
int t,n,a,b,c;
while(cin>>t>>n)
{
memset(p,-1,sizeof(p));
memset(vis,false,sizeof(vis));
fill(d,d+N,inf);
int temp=0;
while(t--)
{
scanf("%d%d%d",&a,&b,&c);//双向链表
e[temp].u=b;
e[temp].c=c;
e[temp].next=p[a];
p[a]=temp;
temp++;
e[temp].u=a;
e[temp].c=c;
e[temp].next=p[b];
p[b]=temp;
temp++;
}
spfa(1);
cout<<d[n]<<endl;
}
return 0;
}

poj 2387 Til the Cows Come Home spfa基础题,入门,我的第一个相关推荐

  1. POJ 2387 Til the Cows Come Home (最短路径 模版题 三种解法)

    原题链接:Til the Cows Come Home 题目大意:有  个点,给出从  点到  点的距离并且  和  是互相可以抵达的,问从  到  的最短距离. 题目分析:这是一道典型的最短路径模版 ...

  2. Poj 2387 Til the Cows Come Home 迪杰斯特拉(普通+优化)

    Til the Cows Come Home 迪杰斯特拉(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回来. 农场主约翰的田里有n( ...

  3. POJ 2387 Til the Cows Come Home

    传送门:http://poj.org/problem?id=2387 这是最短路径问题,本题有重边,但是spfa能解决这个问题: 实现代码: SPFA: 1 #include <iostream ...

  4. POJ - 2387 Til the Cows Come Home

    感觉一直写的dij堆优化都是假的,最短路板子spfa+ dij堆优化 SPFA #include<stdio.h> #include<string.h> #include< ...

  5. poj 2387 Til the Cows Come Home dijkstra

    题意: 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回来. 农场主约翰的田里有n(2<=n<=1000)个地标,唯一编号为1-n.地标 ...

  6. 【POJ】2387 Til the Cows Come Home

    题目链接:http://poj.org/problem?id=2387 题意:求从1到n的最短路 题解:板子题.spfa. 代码: 1 #include<iostream> 2 #incl ...

  7. pku 2387 Til the Cows Come Home

    原来一直没去学spfa,感觉只一个Dij已经很够用了,昨天翻了一下最短路,如果路径中存在负权的话,Dij也只能素手无策,这时spfa就大显身手了.. 实现过程: 我们用数组d记录每个结点的最短路径估计 ...

  8. A - Til the Cows Come Home POJ - 2387

    A - Til the Cows Come Home POJ - 2387 最短路 #include<iostream> #include<cstdio> #include&l ...

  9. DIJSPFA-Til the Cows Come Home POJ - 2387

    Til the Cows Come Home POJ - 2387 用dij和spfa写了做个对比,看了一篇很好的文章对这两个算法有了更好的理解**<Dijkstra+heap和SPFA的区别& ...

  10. Til the Cows Come Home(dijkstra)

    题目连接: Til the Cows Come Home 题目: Bessie is out in the field and wants to get back to the barn to get ...

最新文章

  1. mysql字段名与关键字冲突(near to:syntax error)
  2. 读书感悟 1 孙子兵法虚实篇(最重要的事情只有一件)
  3. 您如何查看MySQL用户权限
  4. maven-antrun-plugin - Target
  5. Java:14 个 Spring MVC 顶级技巧,随时用随时爽,一直用一直爽
  6. 导数卷积 (NTT)
  7. html超链接去虾线,挑虾线别只会用牙签了,渔民都是这样做的,1秒处理一个,超方便...
  8. JPA Annotation注解
  9. 面向对象六大原则详解
  10. Cobra命令行框架及使用
  11. POJ 2039 Floyd
  12. 经验分享|测试工程师转型测试开发历程
  13. ORACLE数据库测试题(一)
  14. 【黑客免杀攻防】读书笔记15 - 源码免杀、C++壳的编写
  15. firefly-rk3288开发板Linux驱动——W25Q32 SPI驱动
  16. POI导出Excel时 设置单元格类型为 数值类型 或者文本类型
  17. 【历史上的今天】5 月 4 日:微软放弃收购雅虎;史上最危险的电脑病毒;vi 发布
  18. 老男孩教育运维班100台规模集群存储系统搭建及数据实时备份上机实战
  19. 【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器
  20. 洛谷 P1304 哥德巴赫猜想

热门文章

  1. 浅评-我所用的输入法
  2. pivot 与 unpivot函数
  3. SQL Identity自增列清零方法
  4. blog迁来迁去的......
  5. 我也有了博客了,呵呵~~
  6. 《2008胡润百富榜》前三名
  7. iOS:类似于网易云音乐的刷新条目显示弹框
  8. PCB设计中电源与地之间电容的作用(具体放置面积, 大小等等)
  9. 只管认真,有计划的坚持,剩下的交给时间
  10. 2016 Multi-University Training Contest 2