Bellman-Ford模板
来源:互联网 发布:sql r2是什么 编辑:程序博客网 时间:2024/05/22 17:14
Bellman-Ford算法流程分为三个阶段:
(1) 初始化:将除源点外的所有顶点的最短距离估计值 d[v] ←+∞, d[s] ←0;
(2) 迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次)
(3) 检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回false,表明问题无解;否则算法返回true,并且从源点可达的顶点v的最短距离保存在 d[v]中。
算法描述如下:
Bellman-Ford(G,w,s) :boolean //图G ,边集 函数 w ,s为源点
1 for each vertex v ∈ V(G) do //初始化 1阶段
2 d[v] ←+∞
3 d[s] ←0; //1阶段结束
4 for i=1 to |v|-1 do //2阶段开始,双重循环。
5 for each edge(u,v) ∈E(G) do //边集数组要用到,穷举每条边。
6 If d[v]> d[u]+ w(u,v) then //松弛判断
7 d[v]=d[u]+w(u,v) //松弛操作 2阶段结束
8 for each edge(u,v) ∈E(G) do
9 If d[v]> d[u]+ w(u,v) then
10 Exit false
11 Exit true
算法模板(C++)
const int INF = 999999; const int MAXN = 10005;typedef struct Node{int v;//起点int u;//终点int w; }Node;Node edge[MAXN];int dist[MAXN]; //此处要特别注意,bellman-ford算法中不要使用0x7fffffff,为此wa了n次 int edgenum, n;bool BellmanFord(int s){int i, j;bool flag = false;for(i = 1; i <= n; ++i){dist[i] = INF; //其余点的距离设置为无穷}dist[s] = 0; //源点的距离设置为0for(i = 1;i < n; ++i){flag = false; //优化:如果某次迭代中没有任何一个d值改变,尽可以立刻退出迭代而不需要把所有的n-1次迭代都做完for(j = 0; j < edgenum; ++j){if(dist[edge[j].u] > dist[edge[j].v] + edge[j].w){flag = true;dist[edge[j].u] = dist[edge[j].v] + edge[j].w;}}if(!flag){break;}}for(i = 0; i < edgenum; ++i){if(dist[edge[i].v] < INF && dist[edge[i].u] > dist[edge[i].v] + edge[i].w){return false;}}return true;}
- 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
- Bellman-Ford
- 如何为动态为SQL Server表添加字段
- Firefox os
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- 单片机学习笔记--51单片机
- 设计模式六项原则
- Bellman-Ford模板
- log4j 简单例子
- 跑步(walk-矩阵加速图-点边互换)
- 单片机学习笔记--LED8x8点阵广告牌
- 单片机学习笔记--外部中断,定时器,串口中断
- 新浪微博有关操作
- iOS耳机侦听事件
- VC++串口通信小小测试(使用VPSM)
- Sql存储查询数据导出Excel文件(注意:有几百万条数据)