bellman_ford算法的理解
2015-12-30 21:04
316 查看
#include<iostream> #include<cstdio> #include<algorithm> #define INF 0x3f3f3f3f using namespace std; typedef struct Edge { int u,v,weight; }Edge; Edge edge[1100]; int source,edgenum,nodenum; int dist[1100];//存储源点到各个顶点的最小距离 void init() { int i; cin>>source>>edgenum>>nodenum; for(i=1;i<=nodenum;i++) { dist[i]=INF; } dist[source]=0; for(i=1;i<=edgenum;i++) { cin>>edge[i].u>>edge[i].v>>edge[i].weight; if(edge[i].u==source) { dist[edge[i].v]=edge[i].weight; } } } int relax(int u,int v,int weight) { if(dist[v]>dist[u]+weight)//松弛操作的判断条件 { dist[v]=dist[u]+weight; } return 0; } //以源点为中心向外层层扩散,直至覆盖整张图 //为什么循环nodenum-1次的证明还未完成 int main() { int flag=1; int i,j; init();//初始化以及输入数据 for(i=1;i<=nodenum-1;i++)//松弛 {//循环nodenum-1次,以保证所有点充分松弛到距离source距离最小 for(j=1;j<=edgenum;j++) { relax(edge[j].u,edge[j].v,edge[j].weight); } } for(i=1;i<=edgenum;i++)//判断是否存在负环 { if(dist[edge[i].v]>dist[edge[i].u]+edge[i].weight) { printf("存在负环\n"); flag=0; } } if(flag) { for(i=1;i<=nodenum;i++) { printf("%d\n",dist[i]); } } return 0; }
相关文章推荐
- bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
- MIPS交叉编译器 包含组件GCC/GDB/BINUTILS
- 第11天
- 360 旋转
- poj 2409(polya定理模板)
- QT怎样在QTableWidge显示图片
- [二]Ajax基本实现
- 标签分类
- 记录我的前端之路
- 【每日一剂】---onSaveInstanceState()保存临时数据
- 如何改变<input type=”text" >输入框内的值
- HDU 2019
- 大数据成长历程
- 使用fstream输出数据到.txt文件
- 12月30号 iOS程序准备
- 读取注册表hive文件
- 深入分析JavaWeb Item40 -- 文件上传和下载
- linux下串口调试工具/串口终端推荐: picocom
- mac 中npm安装模块去除sudo
- C语言的判断语句