hdu 2544 最短路(两点间最短路径)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2544
方法一:dijkstra算法,求两点之间最短路径。
/************************************************************************/
/*
hdu 最短路
两点之间最短路径
题目大意:dijkstra求两点之间最短路径。
*/
/************************************************************************/ #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h> #define MAX 0xfffffff const int N = ;
int map[N][N];
int vis[N];
int dj[N];
int num,m,n; void build_map()
{
int a,b,c;
for (int i = ; i <= n; i++)
for (int j = i; j <= n; j++)
map[i][j] = map[j][i] = (i==j)?:MAX;
for (int i = ; i < m; i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b] = map[b][a] = c;
} } int DJ()
{
int t = n;
int sum = ;
int min,k;
for (int i = ; i <= n; i++)
dj[i] = MAX;
int cur = ;
dj[cur] = ;
while()
{
min = MAX;
vis[cur] = ;
for (int i = ; i <= n; i++)
{
if(vis[i]==)continue;
if(dj[i]>map[i][cur]+dj[cur])
dj[i] = map[i][cur]+dj[cur];
if (dj[i]<min)
{
min = dj[i];
k = i;
}
}
cur = k;
if(k==n)break;
} return dj[n];
} int main()
{ while(scanf("%d%d",&n,&m) && (n!= && m!=) )
{
build_map();
memset(vis,,sizeof(vis));
printf("%d\n",DJ());
}
return ;
}
方法二:floyd算法,求两点之间最短距离, distance[i][j] = min(distance[i][j], distance[i][k]+distance[k][j]);借助中间点。
/************************************************************************/
/*
hdu 最短路
两点之间最短路径
题目大意:floyd算法,求得两点之间最短距离,(u,v) = min( (u,v),(v,w)+(w,v) );
*/
/************************************************************************/ #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h> #define MIN(a,b) a<b?a:b
#define MAX 0xfffffff const int N = ;
int map[N][N];
int vis[N];
int dj[N];
int num,m,n; void build_map()
{
int a,b,c;
for (int i = ; i <= n; i++)
for (int j = i; j <= n; j++)
map[i][j] = map[j][i] = (i==j)?:MAX;
for (int i = ; i < m; i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b] = map[b][a] = c;
} } int floyd()
{
for (int k = ; k <= n; k++)
{
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
map[i][j] = MIN(map[i][j],map[i][k] + map[k][j]);
}
return map[][n];
} int main()
{ while(scanf("%d%d",&n,&m) && (n!= && m!=) )
{
build_map();
memset(vis,,sizeof(vis));
printf("%d\n",floyd());
}
return ;
}
hdu 2544 最短路(两点间最短路径)的更多相关文章
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- JS广度优先查找无向无权图两点间最短路径
广度优先查找无向无权图两点间最短路径,可以将图看成是以起点为根节点的树状图,每一层是上一层的子节点,一层一层的查找,直到找到目标节点为止. 起点为0度,与之相邻的节点为1度,以此类推. // 广度优先 ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- hdu 2544 最短路 (dijkstra,floyd)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目大意:找到两点间最短的距离值. 代码一:(dijkstra算法) #include < ...
- hdu 2544 最短路
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shi ...
- hdu 2544最短路——最短路的初次总结 UESTC 6th Programming Contest Online
这是一道标准的模板题,所以拿来作为这一段时间学习最短路的总结题目. 题意很简单: 有多组输入数据,每组的第一行为两个整数n, m.表示共有n个节点,m条边. 接下来有m行,每行三个整数a, b, c. ...
- HDu 2544 最短路【dijkstra & floyed & SPFA 】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 2544最短路 (迪杰斯特拉算法)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others) Me ...
随机推荐
- Generating phar.phar chmod: cannot access `ext/phar/phar.phar': No such file or directory make: [ext/phar/phar.phar] Error 1 (ignored)
make install出现了cp: cannot stat `ext/phar/phar.phar': No such file or directory 于是我又: cd ext/phar/ls ...
- Photoshop CS6 操作记录
全局快捷键 橡皮 E 画笔 B 魔棒工具 W 钢笔工具 P 选区工具 M 移动画布 按住Space后鼠标拖动 放大缩小画布 Ctrl+-, Ctrl++ 调出/收回标尺 Ctrl+R 调整画笔大小 [ ...
- 导致线程死锁容易忽略的一点 SendMessage
假如主线程 某一个按钮 点击的 响应要操作与另一个线程共享的 变量. 在这个点击响应里先lock 之后,假如另一个线程的变量正在 “使用”状态,并且内部又调用了SendMessage试图更新界面的某些 ...
- linux shell 脚本攻略学习18--grep命令详解
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是unix/linux中用于文本搜索 ...
- HTTP 请求头 Header
HTTP 请求头 Header HTTP请求头概述 (HttpServletRequest) HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST或者HEA ...
- 【C#】浅析C#中的日期处理
1.字符串转化为日期 1.1第一种方式 使用 Convert.toDateTime 方法,该方法有很多重载方法,这里笔者就介绍两个常用的重载方法. 第一种: 使用: Convert.ToDateTim ...
- Block(一)基础-b
一.概述 Block是C级别的语法和运行时特性.Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存.堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block ...
- 【Algorithm】快速排序
一. 算法描述 快速排序:快速排序采用分治法进行排序,首先是分割,选取数组中的任意一个元素value(默认选用第一个),将数组划分为两段,前一段小于value,后一段大于value:然后再分别对前半段 ...
- Git管理工具对比(GitBash、EGit、SourceTree)(转载)
Git管理工具对比(GitBash.EGit.SourceTree) GitBash是采用命令行的方式对版本进行管理,功能最为灵活强大,但是由于需要手动输入希望修改的文件名,所以相对繁琐. EGit是 ...
- mongodb c++ driver 2.0编译使用
安装boost1.48.0 在boost的官网下载boost1.48.0,链接例如以下: http://sourceforge.net/projects/boost/files/boost/1.48. ...