最短路

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 42527    Accepted Submission(s): 18622

Problem Description
在每年的校赛里。全部进入决赛的同学都会获得一件非常美丽的t-shirt。可是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!

所以如今他们想要寻找最短的从商店到赛场的路线。你能够帮助他们吗?


 
Input
输入包含多组数据。

每组数据第一行是两个整数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条商店到赛场的路线。

 
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
 
Sample Input
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
 
Sample Output
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 &amp; floyed &amp; SPFA 】的更多相关文章

  1. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  2. hdu 2544 最短路 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ...

  3. HDOJ/HDU 2544 最短路---dijkstra算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 这题的思路可以见这里(同一类型):http://blog.csdn.net/xiaozhuaix ...

  4. HDU 2544最短路dijkstra模板题

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. HDU 2544 最短路(dijkstra+邻接矩阵)

    ( ̄▽ ̄)" #include<iostream> #include<cstdio> using namespace std; const int INF=10e7; ...

  6. HDU - 2544最短路 (dijkstra算法)

    HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...

  7. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  8. HUD.2544 最短路 (Dijkstra)

    HUD.2544 最短路 (Dijkstra) 题意分析 1表示起点,n表示起点(或者颠倒过来也可以) 建立无向图 从n或者1跑dij即可. 代码总览 #include <bits/stdc++ ...

  9. (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。

    floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...

  10. hdu 2544 最短路

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shi ...

随机推荐

  1. 性能测试三十五:jvm垃圾回收-GC

    垃圾回收-GC 三个问题 哪些内存需要回收? 什么时候回收? 如何回收? YoungGC和FullGC: 新生代引发的GC叫YoungGC 老年代引发的GC叫FullGC FullGC会引起整个Jvm ...

  2. python 全栈开发,Day96(Django REST framework 视图,django logging配置,django-debug-toolbar使用指南)

    昨日内容回顾 1. Serializer(序列化) 1. ORM对应的query_set和ORM对象转换成JSON格式的数据 1. 在序列化类中定义自定义的字段:SerializerMethodFie ...

  3. k8s单机部署1.11.5

    一.概述 由于服务器有限,因此只能用虚拟机搭建 k8s.但是开3个节点,电脑卡的不行. k8s中文社区封装了一个 Minikube,用来搭建单机版,链接如下: https://yq.aliyun.co ...

  4. BBC 记录片planet earth

    He'll have to remain on guard for another two weeks, but in the jungle, just surviving the day can c ...

  5. 在Centos中安装aria2c

    # 安装aria2c 1 安装epel源 rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm ...

  6. android adb命令 抓取系统各种 log

    getLog.bat: adb root adb remount adb wait-for-device adb logcat -v time > C:\log.txt 在Android中不同的 ...

  7. asp.net core 微信H5支付(扫码支付,H5支付,公众号支付,app支付)之2

    上一篇说到微信扫码支付,今天来分享下微信H5支付,适用场景为手机端非微信浏览器调用微信H5支付惊醒网站支付业务处理.申请开通微信H5支付工作不多做介绍,直接上代码. 首先是微信支付业务类(WxPayS ...

  8. ubuntu16.04下搜狗输入法异常

    问题描述: 搜狗输入法出现异常, 提示: 删除 .config/Sougou-PY 文件后重启 解决方案: google后发现,搜狗拼音输入法使用 fcitx 框架. 发现系统同时安装了ibus框架 ...

  9. 2015 Benelux Algorithm Programming Contest E-Excellent Engineers

    题目大意:有n个人,每个人都有三个物品,排名分别为a[ i ],b[ i ],b[ i ],现在要删掉其中的一些人 如果一个人x的三个物品的排名为a[ x ],b[ x ],b[ x ],若存在另一个 ...

  10. x,y

    x,y在二维里,横纵坐标容易反,有关处理要小心.