HDu 2544 最短路【dijkstra & floyed & SPFA 】
最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 42527 Accepted Submission(s): 18622
所以如今他们想要寻找最短的从商店到赛场的路线。你能够帮助他们吗?
每组数据第一行是两个整数N、M(N<=100。M<=10000)。N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。
接下来M行,每行包含3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路。我们的工作人员须要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
3
2
求特定起点的到终点的最小值,取距离当前起点近期的点为中间点,比較起点到其它点的距离与起点到中间点的距离加上中间点到其它点的距离之和的大小,更新起点到其它点的最小值,以得到起点到终点的最小值
dijkstra
#include <iostream>
#include<cstdio>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int n,map[110][110];
int vis[110],rec[110];
void dijkstra(int s,int e)
{
int minw,mark;
memset(vis,0,sizeof(vis));
vis[s]=1;
for(int i=1;i<=n;++i)
rec[i]=map[s][i];
for(int i=1;i<=n;++i)
{
minw=inf;
for(int j=1;j<=n;++j)
{
if(!vis[j]&&rec[j]<minw)
{
minw=rec[j];
mark=j;
}
}
vis[mark]=1;
for(int j=1;j<=n;++j)
{
if(!vis[j]&&rec[j]>rec[mark]+map[mark][j])
rec[j]=rec[mark]+map[mark][j];
}
}
printf("%d\n",rec[e]);
}
int main()
{
int m,a,b,v;
while(scanf("%d%d",&n,&m)&&(n||m))
{
memset(map,inf,sizeof(map));
while(m--)
{
scanf("%d%d%d",&a,&b,&v);
if(v<map[a][b])
map[a][b]=map[b][a]=v;
}
dijkstra(1,n);
}
return 0;
}
求随意两点间的最短距离。任取中间点不断更新最小值
floyed
#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int n,map[110][110];
void floyed()
{
for(int k=1;k<=n;++k)
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
}
}
printf("%d\n",map[1][n]);
}
int main()
{
int m,a,b,v;
while(scanf("%d%d",&n,&m)&&(n||m))
{
memset(map,inf,sizeof(map));
while(m--)
{
scanf("%d%d%d",&a,&b,&v);
if(v<map[a][b])
map[a][b]=map[b][a]=v;
}
floyed();
}
return 0;
}
第一篇SPFA。參照宇神模板
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 110
#define maxm 20000+20
#define inf 0x3f3f3f
using namespace std;
int n,m,cnt,head[maxn],rec[maxn],vis[maxn];
struct node
{
int from,to,val,next;
};
node edge[maxm];
void add(int a,int b,int c)
{
edge[cnt].from=a;
edge[cnt].to=b;
edge[cnt].val=c;
edge[cnt].next=head[a];
head[a]=cnt++;
}
void initialize()
{
cnt=0;
memset(head,-1,sizeof(head));
}
void getmap()
{
int a,b,c;
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
}
void spfa(int s)
{
queue<int>q;
memset(vis,0,sizeof(vis));//记录已在队列中的点
memset(rec,inf,sizeof(rec));//记录最短距离
rec[s]=0;
vis[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;//该点之后还可能进入队列
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if(rec[v]>rec[u]+edge[i].val)
{
rec[v]=rec[u]+edge[i].val;
if(!vis[v])
{
q.push(v);//该点若不在队列中,更新过的rec[v]可能会影响其它点的最短距离所以在进入队列
vis[v]=1;
}
}
}
}
printf("%d\n",rec[n]);
}
int main()
{
while(scanf("%d%d",&n,&m)&&(n||m))
{
initialize();
getmap();
spfa(1);
}
return 0;
}
HDu 2544 最短路【dijkstra & floyed & SPFA 】的更多相关文章
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- hdu 2544 最短路 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ...
- HDOJ/HDU 2544 最短路---dijkstra算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 这题的思路可以见这里(同一类型):http://blog.csdn.net/xiaozhuaix ...
- HDU 2544最短路dijkstra模板题
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 2544 最短路(dijkstra+邻接矩阵)
( ̄▽ ̄)" #include<iostream> #include<cstdio> using namespace std; const int INF=10e7; ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HUD.2544 最短路 (Dijkstra)
HUD.2544 最短路 (Dijkstra) 题意分析 1表示起点,n表示起点(或者颠倒过来也可以) 建立无向图 从n或者1跑dij即可. 代码总览 #include <bits/stdc++ ...
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...
- hdu 2544 最短路
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shi ...
随机推荐
- 通配符(WildCard)的使用
一.关于WildCard:一个web应用,有成千上万个action声明,可以利用struts2提供的映射机制把多个彼此相似的映射关系简化成一个映射关系,即通配符. 1.新建类 ActionWildCa ...
- java根据word模板导出word文件
1.word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量 2.将word文档另存为xml文件.编辑如下图,找到填写的占位,修改为${bcrxm}格式 3.将文件后缀名改为.ftl文 ...
- python包管理之Pip安装及使用-1
Python有两个著名的包管理工具easy_install.py和pip.在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装. pip可以运行在Uni ...
- 【C++ Primer | 15】构造函数与拷贝控制
合成拷贝控制与继承 #include <iostream> using namespace std; class Base { public: Base() { cout << ...
- UOJ Round #1 题解
题解: 质量不错的一套题目啊..(题解也很不错啊) t1: 首先暴力显然有20分,把ai相同的缩在一起就有40分了 然后会发现由于原来的式子有个%很不方便处理 so计数题嘛 考虑一下容斥 最终步数=初 ...
- Immediate Decodability HDU1305
类似phonelist 一次ac 判断失败主要有两个要点 1. 是否包含了某段的结尾结点 说明某段被此段包含 2.此段的结尾结点是否为某段的痕迹 说明此段被包含 #include<bi ...
- 第六章|网络编程-socket开发
1.计算机基础 作为应用开发程序员,我们开发的软件都是应用软件,而应用软件必须运行于操作系统之上,操作系统则运行于硬件之上,应用软件是无法直接操作硬件的,应用软件对硬件的操作必须调用操作系统的接口,由 ...
- 016 Spark中关于购物篮的设计,以及优化(两个点)
一:介绍 1.购物篮的定义 2.适用场景 3.相关概念 4.步骤 5.编程实现 6.步骤 二:程序 1.程序 package com.ibeifeng.senior.mba.association i ...
- 如何下载离线Adobe软件教程
在如今好多软件官网上面都不支持离线安装包下载,仅仅只留下一个在线安装,那么面对这种情况我们应该如何去做?在这里我先提供一个常用的PDF阅读器离线安装包下载地址,在文章后面会有教程. Adobe Acr ...
- java 同步 synchronized
http://www.cnblogs.com/Qian123/p/5691705.html http://www.cnblogs.com/GnagWang/archive/2011/02/27/196 ...