bellman_ford算法
给定一个源点,求最短路径,那么存在以源点为根的最短路径树
因为最短路径具有最优子结构的性质,所以我们可以先求出树的第一层,然后再求出树的第二层,以此类推
bellman_ford算法就是按照这种思想求最短路径的。
因为树最多有n-1层,所以只要n-1次循环即可,每次循环i访问所有的边,然后松弛路径,就求出了第i层的最短路径。
那么很明显,该算法的时间复杂度为O(VE)
http://acm.fafu.edu.cn/problem.php?id=1473
#include <stdio.h>
#include <string.h>
const int N = +;
const int INF = <<;
struct Edge
{
int u,v,weight;
}g[];
int dist[N];
void relax(int u, int v,int weight)
{
if(dist[v] > dist[u] + weight)
dist[v] = dist[u] + weight;
}
void bellman_ford(int n, int m)
{
int i,j;
for(i=; i<n-; ++i)//n-1循环
for(j=; j<m; ++j)//枚举所有的边去松弛最短路径
{
relax(g[j].u,g[j].v,g[j].weight);
}
}
int main()
{
int n,m,a,b,c,i;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=; i<=n; ++i)
dist[i] = INF;
for(i=; i<m; ++i)
{
scanf("%d%d%d",&g[i].u,&g[i].v,&g[i].weight);
if(g[i].u==)
dist[g[i].v] = g[i].weight;
}
bellman_ford(n,m);
for(i=; i<=n; ++i)
printf("%d\n",dist[i]);
}
return ;
}
bellman_ford算法的更多相关文章
- POJ 3259 Wormholes (Bellman_ford算法)
题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- POJ 3259 Bellman_Ford算法
额.关键是读题.反正我是看了解题报告才知道意思的.给你n个点.m条路.双向的.耗费时间.w个虫洞.单向的.时间为负值.问你是否可以从某一点返回看到之前的自己.即为判断是不是有负环.用Bellman_F ...
- Bellman_ford 算法 Currency Exchange POJ1860
Bellman_ford算法用于寻找正环或者负环! 算法导论: 24.1 The Bellman-Ford algorithm The Bellman-Ford algorithm solves th ...
- 数据结构实验之图论十一:AOE网上的关键路径【Bellman_Ford算法】
Problem Description 一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图. AOE(Activity On Edge)网:顾名思义,用边 ...
- 【转】Bellman_ford算法
原文链接:http://www.cnblogs.com/Jason-Damon/archive/2012/04/21/2460850.html 摘自百度百科 Bellman-ford算法是求含负权图的 ...
- 算法基础⑨搜索与图论--存在负权边的最短路--bellman_ford算法
bellman-ford算法 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 ...
- Bellman_Ford算法(求一个点到任意一点的最短距离)
单源最短路问题是固定一个起点,求它到任意一点最短路的问题. 记从起点出发到顶点 i 的最短距离为d[i],则有以下等式成立 d[i]=min{d[j]+(从j到 i 的边的权值) 看代码 #inclu ...
- poj 3259 时光穿梭问题 bellman_ford算法
题意:有n个空地,有m条双向大路,w条时光隧道单向路.问能否回到过去? 思路:判断是否有负环存在,如果有负环存在那么就可以一直小就可以回到过去了 创建源顶点 V到其他顶点的距离d 初始为INF d[1 ...
- Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解
/* Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次. 要知道,我们从队列头部找到的都是到 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其 ...
随机推荐
- Oracle 执行计划了的rows概念
alter session set statistics_level=all; select t1.* from t1,t2 where t1.id=t2.id and t1.id<3; sel ...
- 框架基础JNI
转载请标明出处: http://blog.csdn.net/yujun411522/article/details/46342793 本文出自:[yujun411522的博客] 2.1 概述 JNI ...
- 黑客白皮书:如何成为一名黑客(附FAQ)
内容一览 为什么会有这份文档? 什么是黑客? 黑客应有的态度 黑客的基本技能 黑客文化中的地位 黑客和书呆子(Nerd)的联系 风格的意义 其它资源 FAQ(常问问题解答) 作为Jargon Fi ...
- 获取option中间的值
<select name="wytype" id="wytype"> <option value="">—请选择—& ...
- RealThinClient学习(一)
服务端代码: unit RtcHttpServer; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...
- MySql 链接url 参数详解
最近 整理了一下网上关于MySql 链接url 参数的设置,有不正确的地方希望大家多多指教: mysql JDBC URL格式如下: jdbc:mysql://[host:port],[host:po ...
- GC日志分析
JVM的GC日志的主要參数包含例如以下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的具体日志 -XX:+PrintGCTimeStamps 输出GC ...
- Java I/O— 梳理各种“流”
背景 Java核心库java.io它提供了一个综合IO接口.包含:文件读写.标准装备输出等..Java在IO它是流为基础进行输入输出的.全部数据被串行化写入输出流,或者从输入流读入. -- 百度百科 ...
- 西南民大oj(两园交求面积)
西南民大oj:http://www.swunacm.com/acmhome/welcome.do?method=index 我的几何不可能那么可爱 时间限制(普通/Java) : 1000 MS/ 3 ...
- HDU 1226 超级密码 (搜素)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1226 题意简单,本来是一道很简单的搜素题目. 但是有两个bug: 1.M个整数可能有重复的. 2.N可 ...