Bellman-ford算法
来源:互联网 发布:安装ubuntu盘符设置 编辑:程序博客网 时间:2024/06/08 13:24
//bellman算法:
思路:进行n定点数-1次的松弛化操作,每次对所有边进行松弛化,所以不必开一个edgehead数组,因为不需要搜索遍历
??适用有向图??
#include <iostream>#include<cstdio>#include<math.h>#include<queue>#include<cstring>#define inf 0x7f7f7f7fusing namespace std;struct edge{int u,v,w;}edge[10000];int dis[100000];int edgenum;int nodenum;int pre[1000000];void print_path(int n){ int nn=pre[n]; if(pre[n]!=n) {print_path(nn); printf("%d ",nn);}};int bellman_ford(){ int i,j; for(i=1;i<=nodenum;i++) dis[i]=inf; pre[1]=1; dis[1]=0; for(i=1;i<=nodenum-1;i++) for(j=1;j<=edgenum;j++) { if(dis[edge[j].v]>dis[edge[j].u]+edge[j].w) { dis[edge[j].v]=dis[edge[j].u]+edge[j].w; pre[edge[j].v]=edge[j].u; } } int flag=0; for(j=1;j<=edgenum;j++) { if(dis[edge[j].v]>dis[edge[j].u]+edge[j].w) { flag=1; break; } } if (flag) return -1; else return 1;};int main(){ scanf("%d %d",&nodenum,&edgenum); int i,n; scanf("%d",&n); for(i=1;i<=edgenum;i++) { scanf("%d %d %d",&edge[i].u,&edge[i].v,&edge[i].w); } if(bellman_ford()>0) { printf("%d\n",dis[n]); print_path(n); printf("%d ",n); } return 0;}
0 0
- Bellman-Ford&SPFA算法
- Bellman-ford算法实现
- Bellman-Ford 算法详解
- Bellman-Ford算法
- Bellman-Ford算法
- Bellman-Ford路由算法
- Bellman-Ford算法分析
- bellman ford算法
- Bellman-Ford算法
- Bellman-Ford算法总结
- Bellman-ford算法
- bellman-ford算法
- bellman-ford 算法
- Bellman-Ford算法
- Bellman-Ford算法
- bellman ford 算法
- Bellman-Ford 算法
- Bellman-Ford算法
- Qt--安装QWT
- qt---安装使用Qwtpolat
- Collections(集合操作的工具类)&集合的同步控制&不可变集合的设置
- qt--安装使用qwtplot3d
- 欢迎使用CSDN-markdown编辑器
- Bellman-ford算法
- VS常用快捷键
- 使用webmagic爬取搜狗上公众账号发布的文章信息
- 文章标题
- java中Map,List与Set的区别
- List,set,Map 的用法和区别
- 数理统计——Bayes, 先验概率和后验概率
- 设置DrawerLayout不可以点击后面的控件
- 揭秘:58同城数据库架构设计思路(最全集锦)