我的spfa (= =)!
来源:互联网 发布:留学新加坡 知乎 编辑:程序博客网 时间:2024/05/24 13:28
从同学那里学的spfa,只不过改了几个我常用的变量名,加了几句评论,就成我的东西!呵呵,赶脚自己是小偷,在偷技术!哈哈,不过他要是来问我的话,我也会毫无保留的跟他说的,我们要跟国际接轨,要有开源精神!下面给出spfa的一般代码,具体变量作用在代码中略有解释!
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int maxn=10005;const int INF=0x3f3f3f3f;int g[maxn][maxn];int vis[maxn],dis[maxn];queue<int > que;void init(){ memset(g,INF,sizeof(g)); for(int i=0;i<maxn;i++)g[i][i]=0;}void spfa(int from,int to,int n){ memset(vis,0,sizeof(vis)); memset(dis,INF,sizeof(dis)); dis[from]=0; que.push(from); while(!que.empty()){ int x=que.front(); que.pop(); vis[x]=1; for(int y=1;y<=n;y++){ //枚举连接x点所有点 if(g[x][y]==INF)continue; if(dis[x]<INF&&dis[y]>dis[x]+g[x][y]){ //更新到from的最短路; dis[y]=dis[x]+g[x][y]; if(!vis[y]){ //剪枝,看他们是否已经在队列中; que.push(y); vis[y]=1; } } } } //for(int i=0;i<=n;i++)printf("%d : %d\n",i,dis[i]);}int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ init(); int from ,to,len; for(int i=0;i<m;i++){ scanf("%d%d%d",&from ,&to,&len); if(len<g[from][to]) g[from][to]=g[to][from]=len; } scanf("%d%d",&from,&to); spfa(from ,to, n); printf("%d \n",dis[to]); } return 0;}
0 0
- 我的spfa (= =)!
- 我的spfa
- poj 2387 Til the Cows Come Home spfa基础题,入门,我的第一个
- poj 1511 Invitation Cards spfa 基础题!!虽然我做的比较坎坷!!可以练手啊!!
- 一个人的旅行(http://acm.hdu.edu.cn/showproblem.php?pid=2066)SPFA||dijkstra
- 类似spfa?我也不太清楚
- SPFA的堆栈实现
- SPFA的两个优化
- SPFA的两个优化
- spfa 的 slf 优化
- SPFA的两个优化
- SPFA的学习beta2
- 卡哇伊狗狗的spfa模板
- 一个人的旅行 spfa
- 一个人的旅行--spfa
- 洋气的SPFA
- SPFA算法的实现
- 邻接表的spfa
- ASP.NET MVC 3的概述
- IOS7新特性汇总
- STL中队列的使用
- 关于使用 ASIHTTPRequest URL中文参数乱码问题
- 让Box2D刚体无阻尼匀速运动
- 我的spfa (= =)!
- socket模拟http请求
- 利用深度优先搜索做的随机生成地图的迷宫小游戏
- python 去除html标签函数
- squashfs make
- 使用笔记本分享热点点击命令出现,“netsh”不是内部或外部命令,也不是可运行的程序或批处理文件解决办法
- iOS中常用的四种数据持久化方法简介
- poj 1901 跳蚤 扩展欧几里得定理和容斥原理的应用
- 进程组,会话,控制终端,守护进程(请大家指教)