poj 2387 Til the Cows Come Home spfa基础题,入门,我的第一个
终于想到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基础题,入门,我的第一个相关推荐
- POJ 2387 Til the Cows Come Home (最短路径 模版题 三种解法)
原题链接:Til the Cows Come Home 题目大意:有 个点,给出从 点到 点的距离并且 和 是互相可以抵达的,问从 到 的最短距离. 题目分析:这是一道典型的最短路径模版 ...
- Poj 2387 Til the Cows Come Home 迪杰斯特拉(普通+优化)
Til the Cows Come Home 迪杰斯特拉(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回来. 农场主约翰的田里有n( ...
- POJ 2387 Til the Cows Come Home
传送门:http://poj.org/problem?id=2387 这是最短路径问题,本题有重边,但是spfa能解决这个问题: 实现代码: SPFA: 1 #include <iostream ...
- POJ - 2387 Til the Cows Come Home
感觉一直写的dij堆优化都是假的,最短路板子spfa+ dij堆优化 SPFA #include<stdio.h> #include<string.h> #include< ...
- poj 2387 Til the Cows Come Home dijkstra
题意: 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回来. 农场主约翰的田里有n(2<=n<=1000)个地标,唯一编号为1-n.地标 ...
- 【POJ】2387 Til the Cows Come Home
题目链接:http://poj.org/problem?id=2387 题意:求从1到n的最短路 题解:板子题.spfa. 代码: 1 #include<iostream> 2 #incl ...
- pku 2387 Til the Cows Come Home
原来一直没去学spfa,感觉只一个Dij已经很够用了,昨天翻了一下最短路,如果路径中存在负权的话,Dij也只能素手无策,这时spfa就大显身手了.. 实现过程: 我们用数组d记录每个结点的最短路径估计 ...
- A - Til the Cows Come Home POJ - 2387
A - Til the Cows Come Home POJ - 2387 最短路 #include<iostream> #include<cstdio> #include&l ...
- DIJSPFA-Til the Cows Come Home POJ - 2387
Til the Cows Come Home POJ - 2387 用dij和spfa写了做个对比,看了一篇很好的文章对这两个算法有了更好的理解**<Dijkstra+heap和SPFA的区别& ...
- 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 ...
最新文章
- mysql字段名与关键字冲突(near to:syntax error)
- 读书感悟 1 孙子兵法虚实篇(最重要的事情只有一件)
- 您如何查看MySQL用户权限
- maven-antrun-plugin - Target
- Java:14 个 Spring MVC 顶级技巧,随时用随时爽,一直用一直爽
- 导数卷积 (NTT)
- html超链接去虾线,挑虾线别只会用牙签了,渔民都是这样做的,1秒处理一个,超方便...
- JPA Annotation注解
- 面向对象六大原则详解
- Cobra命令行框架及使用
- POJ 2039 Floyd
- 经验分享|测试工程师转型测试开发历程
- ORACLE数据库测试题(一)
- 【黑客免杀攻防】读书笔记15 - 源码免杀、C++壳的编写
- firefly-rk3288开发板Linux驱动——W25Q32 SPI驱动
- POI导出Excel时 设置单元格类型为 数值类型 或者文本类型
- 【历史上的今天】5 月 4 日:微软放弃收购雅虎;史上最危险的电脑病毒;vi 发布
- 老男孩教育运维班100台规模集群存储系统搭建及数据实时备份上机实战
- 【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器
- 洛谷 P1304 哥德巴赫猜想