最短路

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. 内联外联CSS和JS

    内联CSS 代码示例: <p style="color:red;font-size:18px">这里文字是红色.</p> 内联CSS也可称为行内CSS或者行 ...

  2. javascript如何从tr中分别获得每个td的元素

    <html> <body> <table border="1" id="table1"> <tr id="r ...

  3. zookeeper在dubbo中干什么

    本文旨在表述出自己对于zookeeper在dubbo的作用的初步理解 在对dubbo进行了初步的探索后,对于zookeeper在其中的作用不甚了解,因为本身对zookeeper就没有一个特别具体的概念 ...

  4. join 关键字

    参考:http://www.blogjava.net/vincent/archive/2008/08/23/223912.html

  5. Spring启动研究2.AbstractApplicationContext.obtainFreshBeanFactory()研究

    据说这个方法里面调用了loadBeanDefinitions,据说很重要,并且跟我感兴趣的标签解析有关,所以仔细看看 obtainFreshBeanFactory()这个方法在AbstractAppl ...

  6. webstrom的热更新没效果

    webstorm保存的时候会先保存到临时文件中,其实并没有真正保存,要在setting->stystem settings下的“use save write”去掉

  7. day15--JavaScript

        上节作业回顾 <style></style>代表的是CSS样式 <script></script>代表的是JavaScript样式     1. ...

  8. 076 Apache的HBase与cdh的sqoop集成(不建议不同版本之间的集成)

    1.修改sqoop的配资文件 2.从mysql导入到hbase(import) bin/sqoop import \ --connect jdbc:mysql://linux-hadoop3.ibei ...

  9. Unity 之 Game视图不显示

    如果你确认的Scene视图没有问题,试着检查一下 物体的Layer 与 camera的Culling mask是否一致,或者说camera的Culling mask中是否包含物体的layer 这是相机 ...

  10. POJ 2752 (kmp求所有公共前后缀长度)

    <题目链接> <转载于> 题目大意:  给出一个字符串str,求出str中存在多少子串,使得这些子串既是str的前缀,又是str的后缀.从小到大依次输出这些子串的长度.即输出该 ...