HDU 2544 最短路 (最短路,spfa)
题意:中文题目
思路:spfa+SLF优化。关于SPFA的详情请戳我
#include <bits/stdc++.h>
using namespace std;
const int N=, INF=0x7f7f7f7f;
int n, m;
bool vis[N]; //标记是否在队列中
int dest[N]; //路径长度
int mapp[N][N]; int spfa(int s, int e) //求最短路径
{
memset(dest,0x7f,sizeof(dest));
dest[s]=;
vis[s]=;
deque<int> que;
que.push_back(s);
while(!que.empty())
{
int tmp=que.front();
que.pop_front();
vis[tmp]=;
for(int i=; i<=n; i++)
{
if(mapp[tmp][i] && dest[tmp]+mapp[tmp][i]<dest[i] )
{
dest[i]=dest[tmp]+mapp[tmp][i];
if(!vis[i]) //一旦被更新,必须进队列
{
vis[i]=;
if(que.empty()) que.push_back(i); //SLF优化,路短的优先放前面
else
{
if(dest[que.front()]>dest[i])
que.push_front(i);
else
que.push_back(i);
}
}
}
}
}
return dest[e];
} int main()
{
//freopen("input.txt", "r", stdin);
int a, b, c;
while(scanf("%d%d", &n, &m), n+m)
{
memset(vis,,sizeof(vis));
memset(mapp,,sizeof(mapp)); for(int i=; i<m; i++)
{
scanf("%d%d%d",&a,&b,&c);
mapp[a][b]=mapp[b][a]=c;
}
printf("%d\n",spfa(,n));
} return ;
}
AC代码
Dijkstra
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=+;
const int INF=0x7f7f7f7f; int g[N][N];
int vis[N];
int dist[N]; int dijkstra(int n)
{
memset(vis,,sizeof(vis));
memset(dist,0x7f,sizeof(dist));
dist[]=;
for(int i=; i<=n; i++) //每次用1个点来更新到其他点的距离
{
int flag, small=INF;
for(int j=; j<=n; j++)//找距离最小的点
{
if(!vis[j]&&dist[j]<=small)
{
small=dist[j];
flag=j;
}
}
vis[flag]=;//标记,不需要再用其更新别人。
for(int j=; j<=n; j++)//有边相连就得更新
{
if(g[j][flag])
dist[j]=min(dist[flag]+g[flag][j], dist[j]);
}
}
return dist[n];
} int main()
{
freopen("input.txt", "r", stdin);
int n, m, a, b, w;
while(scanf("%d%d",&n, &m), n+m)
{
memset(g,,sizeof(g));
for(int i=; i<m; i++)
{
scanf("%d%d%d",&a,&b,&w);
g[a][b]=g[b][a]=w;
}
cout<<dijkstra(n)<<endl;
}
return ;
}
AC代码
HDU 2544 最短路 (最短路,spfa)的更多相关文章
- HDU 2544 单源最短路
题目链接: 传送门 最短路 Time Limit: 1000MS Memory Limit: 65536K 题目描述 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是 ...
- HDU 2544(简单最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=2544 /* 使用pair代替结构 */ #include <iostream> #include & ...
- 单源最短路模板 + hdu - 2544
Floyd Floyd 本质上类似一种动态规划,dp [ i ] [ j ] = dp [ i ] [ k ] + dp[ k ] [ j ]. /** * Night gathers, and no ...
- 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 ...
- HDU 2544 最短路 【Dijkstra模板题】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路:最短路的模板题 Dijkstra 算法是一种类似于贪心的算法,步骤如下: 1.当到一个点时, ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...
- UESTC - 1987 童心未泯的帆宝和乐爷 (第k短路 A*算法+SPFA算法 模板)
传送门: http://www.qscoj.cn/#/problem/show/1987 童心未泯的帆宝和乐爷 Edit Time Limit: 10000 MS Memory Limit: ...
- hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题
hdu 2544 求点1到点n的最短路 无向图 Sample Input2 1 //结点数 边数1 2 3 //u v w3 31 2 52 3 53 1 20 0 Sample Output32 ...
随机推荐
- 从String类看写C++ class需要注意的地方
#include <iostream> #include <string.h> using namespace std; class String { char* m_data ...
- Codeforces Round #256 (Div. 2) Multiplication Table
C题, #include<cstdio> #include<cstring> #include<algorithm> #define maxn 5005 using ...
- Observer Pattern
Motivation We can not talk about Object Oriented Programming without considering the state of the ob ...
- orale内置函数COALESCE和GREATEST和LEAST
1. COALESCE 返回该表达式列表的第一个非空value. 格式: COALESCE(value1, value2, value3, ...) 含义: 返回value列表第一个非空的值. val ...
- WAF安恒
http://wenku.baidu.com/view/c242927f581b6bd97e19ea1a.html?from=search
- 适合我胃口的angular.js学习资料
断断续续弄了半年的ANGULAR.JS学习资料,网上下载了N多资料,测试了很多次. 现在只能算是入门,因时间问题,现在要转入其它领域. 如果以后要拾起来,下面这个PDF比较对我胃口. <Angu ...
- Linux 按行分割文件(转载)
将一个大文件分成若干个小文件方法 例如将一个BLM.txt文件分成前缀为 BLM_ 的1000个小文件,后缀为系数形式,且后缀为4位数字形式 先利用 wc -l BLM.txt 读出 BL ...
- Fragment 与 Activity 通信
先说说背景知识: (From:http://blog.csdn.net/t12x3456/article/details/8119607) 尽管fragment的实现是独立于activity的,可以被 ...
- Linux awk小记
预备知识: -F:表示某行使用的分隔符,默认是空格: NR:表示当前是第几行: NF:表示文件中的某行根据分隔符共有几列: 1.打印某一列 awk '{print $1}' text.txt 其中$0 ...
- 重写equals()方法时,需要同时重写hashCode()方法
package com.wangzhu.map; import java.util.HashMap; /** * hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,<br/&g ...