最短路 spfa, dijkstra, Floyd
spfa
#include <stdio.h>
#include <queue>
using namespace std; #define RANGE 101
#define MAX 0x3f3f3f3f
int cost[RANGE][RANGE];
int d[RANGE];
bool used[RANGE];
int n,m; void spfa( int s )
{
int i,now;
// 初始化
for( i=;i<=n;++i )
{
d[i]=MAX;
used[i]=false;
} d[s]=;
queue <int> q;
q.push(s);
used[s] = true; while(!q.empty())
{
now = q.front();
q.pop();
used[now] = false;
for(i = ; i <= n; i++)
{
if(d[i] > d[now] + cost[now][i])
{
d[i] = d[now] + cost[now][i];
if(used[i] == )
{
q.push(i);
used[i] = true;
}
}
}
}
} int main()
{
int i,j,A,B,C;
while( scanf("%d%d",&n,&m) )
{
if( !n && !m ) break;
// 初始化
for( i=;i<=n;++i )
for( j=;j<=i;++j )
if( i==j ) cost[i][j]=;
else cost[i][j]=cost[j][i]=MAX; for( i=;i<m;++i )
{
scanf("%d%d%d",&A,&B,&C);
cost[A][B]=cost[B][A]=C;
} spfa();
printf("%d\n",d[n]);
}
return ;
}
dijkstra
#include <stdio.h>
#define MAX 0x3f3f3f3f
#define RANGE 101 int cost[RANGE][RANGE];
int d[RANGE];
bool used[RANGE]; int n,m;
int Min( int a,int b )
{
return a<b?a:b;
} void Dijkstra( int s )
{
int i,v,u;
for( i=;i<=n;++i )
{
used[i]=false;
d[i]=cost[][i];
}
d[s]=; while( true )
{
v=-;
for( u=;u<=n;++u )
if( !used[u] && ( v==- || d[u]<d[v]) )
v=u;
if( v==- ) break;
used[v]=true; for( u=;u<=n;++u )
d[u]=Min( d[u],d[v]+cost[v][u] );
}
} int main()
{
int A,B,C,i,j; while( scanf("%d%d",&n,&m) )
{
if( !n && !m ) break; // 初始化
for( i=;i<=n;++i )
for( j=;j<=i;++j )
if( i==j ) cost[i][j]=;
else cost[i][j]=cost[j][i]=MAX; for( i=;i<m;++i )
{
scanf("%d%d%d",&A,&B,&C);
cost[A][B]=cost[B][A]=C;
} Dijkstra();
printf("%d\n",d[n]);
}
return ;
}
floyd
#include <stdio.h>
#define MAX 0x3f3f3f3f
#define RANGE 105 int d[RANGE][RANGE];
int n; int Min( int a,int b )
{
return a<b?a:b;
}
void warshall_floyd( void )
{
int i,j,k;
for( k=;k<=n;++k )
for( i=;i<=n;++i )
for( j=;j<=n;++j )
d[i][j]=Min( d[i][j],d[i][k]+d[k][j] );
} int main()
{
int m,A,B,C,i,j; while( scanf("%d%d",&n,&m) )
{
if( !n && !m ) break; // 初始化
for( i=;i<=n;++i )
for( j=;j<=i;++j )
{
if( i==j ) d[i][j]=;
else d[i][j]=d[j][i]=MAX;
} // 输入
for( i=;i<m;++i )
{
scanf("%d%d%d",&A,&B,&C);
d[A][B]=d[B][A]=C;
} // floyd算法求最短路
warshall_floyd();
printf("%d\n",d[][n]);
}
return ;
}
最短路 spfa, dijkstra, Floyd的更多相关文章
- ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- hdoj2544 最短路(Dijkstra || Floyd || SPFA)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路 最短路算法模板题,求解使用的Dijkstra算法.Floyd算法.SPFA算法可以当做求解 ...
- 最短路-SPFA算法&Floyd算法
SPFA算法 算法复杂度 SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环. SPFA一般情况复杂度是O(m)最坏情况下复杂度和朴素 ...
- hdu3665-Seaside(SPFA,dijkstra,floyd)
Seaside Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- HDU 1874 畅通工程续 SPFA || dijkstra||floyd
http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目大意: 给你一些点,让你求S到T的最短路径. 我只是来练习一下SPFA的 dijkstra+邻接矩阵 ...
- HDU 1874 畅通工程续(最短路/spfa Dijkstra 邻接矩阵+邻接表)
题目链接: 传送门 畅通工程续 Time Limit: 1000MS Memory Limit: 65536K Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...
- HDU 1874 SPFA/Dijkstra/Floyd
这题作为模板题,解法好多... 最近周围的人都在搞图论阿,感觉我好辣鸡,只会跟风学习. 暂时只有SPFA和Dijkstra的 SPFA (邻接表版.也可以写成临接矩阵存图,但题目可能给出平行边的,所以 ...
- 最短路(Dijkstra,Floyd,Bellman_Ford,SPFA)
当然,这篇文章是借鉴大佬的... 最短路算法大约来说就是有4种——Dijkstra,Floyd,Bellman_Ford,SPFA 接下来,就可以一一看一下... 1.Dijkstra(权值非负,适用 ...
- 关于SPFA Bellman-Ford Dijkstra Floyd BFS最短路的共同点与区别
关于模板什么的还有算法的具体介绍 戳我 这里我们只做所有最短路的具体分析. 那么同是求解最短路,这些算法到底有什么区别和联系: 对于BFS来说,他没有松弛操作,他的理论思想是从每一点做树形便利,那么时 ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
随机推荐
- 天津大学各种Latex模板共享链接
多元统计课最后Ppt里说要共享一下模板.这里给出链接 https://www.github.com/6gbluewind 注:写本文时还未上传 ************* 下午终于有网了,于是上传了一 ...
- exsi主机之间使用scp拷贝文件超时问题
exsi主机之间使用scp拷贝文件直接连接不上报错超时: 解决: 防火墙勾选ssh选项
- [转] -- html5手机网站自适应需要加的meta标签
webapp开发初期,会碰到在pc端开发好的页面在移动端显示过大的问题,这里需要在html head中加入meta标签来控制缩放 <meta name=" viewport" ...
- vscode 调试vue.js程序
npm install -g vue-cli //安装vue-clivue init webpack projectName //创建项目 1.Ctrl+~ 打开命令行 ...
- SweetAlert的入门
在做后台管理系统,在用户交互这块(弹窗.提示相关),用了一款还不错的插件SweetAlert(一款原生js提示框,允许自定义,支持设置提示框标题.提示类型.确认取消按钮文本.点击后回调函数等等), 效 ...
- Object-C,遍历目录
最近武汉连续下雨很多天,降温了2次,温度一下子由28度到14度,再到8度,手太冷了. 加上最近发生了一些比较棘手的家庭琐事,最近没心情继续学习Object-C. 后来,我想明白了,心情不好的时候,还是 ...
- jQuery模拟输出回车键
jQuery模拟输出回车键 学习了:https://zhidao.baidu.com/question/1753748968579760068.html 原文少了个r var e = jQuery.E ...
- Unix网络编程之环境搭建
环境搭建 在尝试UNP书上的样例时,会由于找不到"unp.h"等问题无法编译成功.因此在学习之前须要先搭建好编译环境. 步骤 <1>下载 UNIX网络编程源码unpv ...
- DNS A记录和CNAME记录
参考文章:http://blog.xieyc.com/differences-between-a-record-and-cname-record/ A (Address) 记录是用来指定主机名(或域名 ...
- javascript中运算符有哪些? 他们的优先级 呢?
一元操作符 ++, -- + -(正负)逻辑操作符 ! && ||基本运算符 +, -, *, /, %关系操作符 >, <, >=, <=, ===, ==, ...