数据结构与算法分析 - 最短路(Dijkstra+floyd_Warshall+bellman_ford)
先附上Djikstra的代码:普通版
const int maxn=101;
const int INF=0x3f3f3f3f;
int edges[maxn][maxn];
int dist[maxn];
void dijkstra(int s,int n){
bool done[maxn];
memset(done,0,sizeof(done));
done[s]=true;
for(int i=0;i<n;i++)
dist[i]=edges[s][i];
for(int i=0,min,u;i<n;i++){
min=INF;
for(int j=0;j<n;j++)
if(!done[j] && dist[j]<min){
min=dist[j];
u=j;
}
done[u]=true;
for(int j=0;j<n;j++){
if(dist[u]+edges[u][j]<dist[j])
dist[j]=dist[u]+edges[u][j];
}
}
}
2.Bellman-Ford 算法
优点:能处理包含负权边的图
//单源点最短路径 - Bellman-Ford算法 #define maxn 31
#define inf 0x3f3f3f3f
class edge{
public:
int from,to,cost;
edge(){
from=0,to=0,cost=0;
}
edge(int a,int b ,int c){
from=a,to=b,cost=c;
}
}; edge Edges[maxn];
int dist[maxn]; void init(){
for(int i=1;i<maxn;i++){
for(int j=1;j<maxn;j++){
if(i==j) Edges[i]=edge(i,j,1);
else Edges[i]=edge(i,j,inf);
}
}
} /*V:顶点数,E:边数*/
void bellman_ford(int s,int V,int E){
for(int i=0;i<V;i++)
dist[i]=inf;
dist[s]=0;
for(int i=1;i<=V;i++){
bool update=false;
for(int j=0;j<E;j++){
edge e=Edges[j];
if(dist[e.from]!=inf && dist[e.to]>dist[e.from]+e.cost){
dist[e.to]=dist[e.from]+e.cost;
update=true;
}
}
if(!update)break;
}
}
3.Floyd_Warshall算法
#define maxn 31
#define inf 0x3f3f3f3f
double edges[maxn][maxn];
void init(){
for(int i=1;i<maxn;i++)
for(int j=1;j<maxn;j++)
edges[i][j]=(i==j?1:inf);
} void floyd_warshall(int n){
for(int k=1;k<=n;k++){
for(int i=1,u;i<=n;i++){
for(int j=1;j<=n;j++){
if(edges[i][k]+edges[k][j]<edges[i][j])
edges[i][j]=edges[i][k]+edges[k][j];
}
}
}
}
数据结构与算法分析 - 最短路(Dijkstra+floyd_Warshall+bellman_ford)的更多相关文章
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- hdu 2544 最短路 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ...
- 算法学习笔记(三) 最短路 Dijkstra 和 Floyd 算法
图论中一个经典问题就是求最短路.最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划.这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是 ...
- <数据结构与算法分析>读书笔记--最大子序列和问题的求解
现在我们将要叙述四个算法来求解早先提出的最大子序列和问题. 第一个算法,它只是穷举式地尝试所有的可能.for循环中的循环变量反映了Java中数组从0开始而不是从1开始这样一个事实.还有,本算法并不计算 ...
- <数据结构与算法分析>读书笔记--运行时间计算
有几种方法估计一个程序的运行时间.前面的表是凭经验得到的(可以参考:<数据结构与算法分析>读书笔记--要分析的问题) 如果认为两个程序花费大致相同的时间,要确定哪个程序更快的最好方法很可能 ...
- <数据结构与算法分析>读书笔记--数学知识复习
数学知识复习是<数据结构与算法分析>的第一章引论的第二小节,之所以放在后面,是因为我对数学确实有些恐惧感.不过再怎么恐惧也是要面对的. 一.指数 基本公式: 二.对数 在计算机科学中除非有 ...
- [数据结构与算法分析(Mark Allen Weiss)]不相交集 @ Python
最简单的不相交集的实现,来自MAW的<数据结构与算法分析>. 代码: class DisjSet: def __init__(self, NumSets): self.S = [0 for ...
- [数据结构与算法分析(Mark Allen Weiss)]二叉树的插入与删除 @ Python
二叉树的插入与删除,来自Mark Allen Weiss的<数据结构与算法分析>. # Definition for a binary tree node class TreeNode: ...
- 数据结构与算法--最短路径之Dijkstra算法
数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们 ...
随机推荐
- 使用HttpWebRequest和HtmlAgilityPack抓取网页(拒绝乱码,拒绝正则表达式)
废话不多说, 直接说需求. 公司的网站需要抓取其他网站的文章,但任务没到我这,同事搞了一下午没搞出来.由于刚刚到公司, 想证明下自己,就把活揽过来了.因为以前做过,觉得应该很简单,但当我开始做的时候, ...
- Tyk API网关介绍及安装说明
Tyk API网关介绍及安装说明 Tyk是一个开源的轻量级API网关程序. 什么是API网关 API网关是一个各类不同API的前置服务器.API网关封装了系统内部架构,对外提供统一服务.此外还可以实现 ...
- [BZOJ1143][CTSC2008]祭祀river(最长反链)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1143 分析: 最长反链==最小路径覆盖==n-二分图最大匹配数 某神犇对二分图的总结: ...
- 柯尔莫可洛夫-斯米洛夫检验(Kolmogorov–Smirnov test,K-S test)
柯尔莫哥洛夫-斯米尔诺夫检验(Колмогоров-Смирнов检验)基于累计分布函数,用以检验两个经验分布是否不同或一个经验分布与另一个理想分布是否不同. 在进行cumulative probab ...
- social emotion computing-感情的分类
第八节 情感的分类 人的情感复杂多样,可以从不同的观察角度进行分类.由于情感的核心内容是价值,因此人的情感主要必须根据它所反映的价值关系的运动与变化的不同特点来进行分类. 1.根据价值的正负变化方向 ...
- 代码生成工具——CodeSmith
1.绿色版软件下载:http://download.csdn.net/detail/laoge/6859701 2.破解说明:http://tieba.baidu.com/p/3373160396 3 ...
- 【JavaScript】 闭包 我战战兢兢的接触了它
源:http://www.liaoxuefeng.com 1. 注意这里用了一个“创建一个匿名函数并立刻执行”的语法: (function (x) { return x * x; })(3); 理论上 ...
- android SwipeRefreshLayout google官方下拉刷新控件
下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍 SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单 今天就来使用下SwipeRefres ...
- Day Four(Beta)
站立式会议 站立式会议内容总结 331 今天:增加了若干话题:建立chat–user类,查阅bmob文档. 明天: 学习bmob的sql操作 442 今天:登录信息在主页上更新数据 遇到的问题:无 明 ...
- 1018MYSQL数据迁移到SQLSERVER
-- 第一步利用MYSQL将数据结果的脚本迁移出来-- 第二步利用POWERDESGINER的反向功能,将脚本生成为物理模型 FILE-REVERSE DATEBASE -- 第三步将物理模型生成SQ ...