最短路

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. django----用户认证(auth模块)

    用法 from django.contrib import auth user = authenticate(username='someone',password='somepassword') l ...

  2. iOS学习笔记之触摸事件&UIResponder

    iOS学习笔记之触摸事件&UIResponder 触摸事件 与触摸事件相关的四个方法如下: 一根手指或多根手指触摸屏幕 -(void)touchesBegan:(NSSet *)touches ...

  3. springMVC源码分析--视图AbstractView和InternalResourceView(二)

    上一篇博客springMVC源码分析--视图View(一)中我们介绍了简单介绍了View的结构实现及运行流程,接下来我们介绍一下View的实现类做的处理操作. AbstractView实现了rende ...

  4. 通过T4模板实现代码自动生成

    1:准备.tt模板 using BBFJ.OA.IBLL; using BBFJ.OA.IDAL; using BBFJ.OA.Model; using System; using System.Co ...

  5. windows下安装GIT,使用GIT GUI 上传文件到github

    安装 1.从官网 https://git-scm.com/download/win下载安装包 2.打开安装包安装,点击next,接着再点击三次next 3.在下拉菜单中选择已安装的文本编辑器,点击ne ...

  6. 20165203 《网络对抗技术》week1 Kali的安装与配置

    20165203 <网络对抗技术>week1 Kali的安装与配置 本人感觉Kali可以做很多有意思的事情,下面是本人的Kali的安装过程. 安装过程 光盘映像文件的下载 登录官网,选择下 ...

  7. #ECMASCRIPT6笔记

    ECMASCRIPT6笔记 来源于http://es6.ruanyifeng.com/#docs/proxy 是我在阅读时做下的笔记,方便以后查阅 Symbol ES5 的对象属性名都是字符串,这容易 ...

  8. Redis数据结构之set

    一:介绍 1.set结构 没有顺序 并且,不允许出现重复的元素. 二:Redis客户端的常用命令 1.添加 2.查看数据 3.删除数据 4.是否存在某个值 1代表有,0代表无. 5.查看差值 有key ...

  9. 020 Spark中分组后的TopN,以及Spark的优化(重点)

    一:准备 1.源数据 2.上传数据 二:TopN程序编码 1.程序 package com.ibeifeng.bigdata.spark.core import java.util.concurren ...

  10. Unity3D 入门 游戏开发 Unity3D portal game development

    Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...