题目很简单,, 但是wa了三次,, 用<vector>之前一定要记得clear()。。。
简单说下 spfa的问题 和bell_forman有点类似 每次取出一个点 然后更新 并把更新了的节点入队(更新的值可能会影响到最优解) 当队列为空的时候算法结束(无法优化)
这里的vis数组是为了防止重复入队 但每个节点可能多次入队 所以在拿出来的时候 vis标记要消去
最后说下负环的问题 引用一下
对于不存在负权回路的图来说,上述算法是一定会结束的。因为算法在反复优化各个最短路径长度,总有一个时刻会进入“无法再优化”的局面,此时一旦队列读空,算法就结束了。
然而,如果图中存在一条权值为负的回路,就糟糕了,算法会在其上反复运行(因为d[]加上一个负数肯定变下了,所以在有负环的情况下,会不断有数进入队列),通过“绕圈”来
无休止地试图减小某些相关点的最短路径值。假如我们不能保证图中没有负权回路,一种“结束条件”是必要的。这种结束条件是什么呢?
  思考Bellman-Ford算法,它是如何结束的?显然,最朴素的Bellman-Ford算法不管循环过程中发生了什么,一概要循环|V|-1遍才肯结束。凭直觉我们可以感到,SPFA算法
“更聪明一些”,就是说我们可以猜测,假如在SPFA中,一个点进入队列——或者说一个点被处理——超过了|V|次,那么就可以断定图中存在负权回路了。(http://www.cnblogs.com/jiangu66/p/3235361.html) 23号比赛加油~
void spfa(int s)
{

int
vis[V];
int
d[V],ret[V];
for
(int i=;i<=n;i++) d[i]=inf,vis[i]=ret[i]=;
d[s]=;
queue<int> q;
q.push(s);
ret[s]++;
vis[s]=;
while
(!q.empty())
{

int
now=q.front();
q.pop();
vis[now]=;
for
(int i=;i<fuck[now].size();i++)
{

node temp=fuck[now][i];
if
(d[temp.point]>d[now]+temp.cost)
{

d[temp.point]=d[now]+temp.cost;
if
(vis[temp.point]==)
{

vis[temp.point]=;
ret[temp.point]++;
q.push(temp.point);
if
(ret[temp.point]>V)
{

cout<<-<<endl;
return
;
}
}
}
} }

cout<<d[n]<<endl;
}

int
main()
{

while
(cin>>n>>m)
{

if
(n==&&m==) break;
for
(int i=;i<=n;i++) fuck[i].clear();
for
(int i=;i<=m;i++)
{

int
x,y,cost;
cin>>x>>y>>cost;
node temp;
temp.cost=cost;
temp.point=x;
fuck[y].push_back(temp);
temp.point=y;
fuck[x].push_back(temp);
}

dijstra();
//spfa(1);
}
return
;
}

最新文章

  1. linux系统内核流转浅析
  2. __clone()方法和传址区别
  3. CSS选择器的权重与优先规则
  4. Hadoop:使用Mrjob框架编写MapReduce
  5. fil_space_t
  6. asp.net mvc get controller name and action name
  7. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.5
  8. Z.Studio高级成衣定制(双井店)价格,地址(图)-北京-大众点评网
  9. php覆盖理解
  10. 常见IT面试题
  11. HBase的Shell命令
  12. 浅谈游戏中BOSS设计的思路
  13. centos下安装jenkins
  14. mybatis mysql 批量插入
  15. JSP内容复习
  16. ApplicationContextAware 接口的作用
  17. pgsql事务与并发控制
  18. CAP理论与分布式事务解决方案
  19. .net 连接 Oracle 可能需要配置
  20. log4j.properties详解

热门文章

  1. 一个简单的puppeteer爬虫
  2. AtomicInteger原理
  3. python 度分秒转度
  4. 移动端——页面点击( touchend -&gt; click)
  5. Fegin的使用总结
  6. [Java读书笔记] Effective Java(Third Edition) 第 4 章 类和接口
  7. 19 个强大、有趣、又好玩的 Linux 命令!
  8. Linux 远程登陆图形界面
  9. 分析UIS-RNN源代码的代码规范和风格
  10. ORB-特征点提取代码比较