UESTC 30.最短路-最短路(Floyd or Spfa(链式前向星存图))
最短路
Time Limit: 3000/1000MS (Java/Others)
Memory Limit: 65535/65535KB (Java/Others)
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的T-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
Input
输入包括多组数据。
每组数据第一行是两个整数NN ,MM (N≤100N≤100 ,M≤10000M≤10000 ),NN 表示成都的大街上有几个路口,标号为11 的路口是商店所在地,标号为NN 的路口是赛场所在地,MM 则表示在成都有几条路。N=M=0N=M=0 表示输入结束。
接下来MM 行,每行包括33 个整数AA ,BB ,CC (1≤A1≤A ,B≤NB≤N ,1≤C≤10001≤C≤1000 ),表示在路口AA 与路口BB 之间有一条路,我们的工作人员需要CC 分钟的时间走过这条路。
输入保证至少存在11 条商店到赛场的路线。
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间。
Sample input and output
| Sample Input | Sample Output |
|---|---|
2 1 |
3 |
题意好理解,就是最短路。
最短路。。。传送门http://developer.51cto.com/art/201403/433874.htm
打训练赛的时候这个题wa了7次,最后也没写对,也是没谁了(;´д`)ゞ
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=+;
const int INF=0x3f3f3f3f;
typedef long long ll;
int hh[N][N];
int n,m;
int gg(){ //关键
for(int h=;h<=n;h++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) //这里当时写错了,j<=n写成j<=m了。。。
hh[i][j]=min(hh[i][j],hh[i][h]+hh[h][j]);
}
int main(){
int h,k,l;
while(~scanf("%d%d",&n,&m)&&(n||m)){
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
hh[i][j]=INF;
for(int i=;i<m;i++){
scanf("%d%d%d",&h,&k,&l);
if(l<hh[h][k])
hh[h][k]=hh[k][h]=l;
}
gg();
printf("%d\n",hh[][n]);
}
return ;
}
啊啊啊啊啊啊啊,还有一个思路可以写,spfa算法+链式前向星建图
然而,前向星有的看懂了,有的还很(O_O)?传送门http://www.cnblogs.com/Tovi/p/6194786.html
人家的代码,传送门http://blog.csdn.net/lvshubao1314/article/details/23034601
代码:
#include<string.h>
#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
const int maxn=1e5+;
const int INF=1e9;
struct node{
int b,w,next;
};
node edge[maxn];
int s,n,ip;
int head[maxn],que[maxn],visit[maxn],dis[maxn];
void add(int u,int v,int c){
edge[ip].b=v;edge[ip].w=c;edge[ip].next=head[u];head[u]=ip++;
}
void spfa(int start,int numpoint){
memset(visit,,sizeof(visit));
for(int i=;i<=numpoint;i++)
dis[i]=INF;
int front=-,tail=-;
dis[start]=;visit[start]=;que[++tail]=start;
int top,to,temp;
while(front!=tail){
if(++front>numpoint)front-=numpoint;
top=que[front];visit[top]=;
for(int p=head[top];p!=-;p=edge[p].next){
to=edge[p].b;temp=dis[top]+edge[p].w;
if(dis[to]>temp){
dis[to]=temp;
if(!visit[to]){
if(++tail>numpoint)tail-=numpoint;
que[tail]=to;
visit[to]=;
}
}
}
}
}
int main(){
int b,w,m,k;
while(~scanf("%d%d",&n,&m)){
if(m==&&n==)break;
int maxx=-;
memset(head,-,sizeof(head));
ip=;
for(int i=;i<=m;i++){
cin>>k>>b>>w;
if(k>maxx)maxx=k;
if(b>maxx)maxx=b;
add(k,b,w);
add(b,k,w);
}
spfa(,maxx);
printf("%d\n",dis[n]);
}
return ;
}
菜的掉渣,继续努力TAT
UESTC 30.最短路-最短路(Floyd or Spfa(链式前向星存图))的更多相关文章
- 最短路 spfa 算法 && 链式前向星存图
推荐博客 https://i.cnblogs.com/EditPosts.aspx?opt=1 http://blog.csdn.net/mcdonnell_douglas/article/deta ...
- UESTC30-最短路-Floyd最短路、spfa+链式前向星建图
最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同 ...
- 【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)
Dijkstra+ 链式前向星+ 优先队列 Dijkstra算法 Dijkstra最短路算法,个人理解其本质就是一种广度优先搜索.先将所有点的最短距离Dis[ ]都刷新成∞(涂成黑色),然后从起点 ...
- HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】
最开始学最短路的时候只会用map二维数组存图,那个时候还不知道这就是矩阵存图,也不懂得效率怎么样 经过几个月的历练再回头看最短路的题, 发现图可以用链式前向星来存, 链式前向星的效率是比较高的.对于查 ...
- SPFA_queue_链式前向星最短路 & HDU2433
题目大意:看完之后,觉得不肯能让我暴力,比较好想的就是初始化——每个点都求个最短路spfa,sum数组记录每个点到各个点的最短路之和,ans作为总和,之后一一删除边u-v,求关于u的最短路,如果dis ...
- Floyd && Dijkstra +邻接表 +链式前向星(真题讲解来源:城市路)
1381:城市路(Dijkstra) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 4066 通过数: 1163 [题目描述] 罗老师被邀请参加一个舞会,是 ...
- [板子]SPFA算法+链式前向星实现最短路及负权最短路
参考:https://blog.csdn.net/xunalove/article/details/70045815 有关SPFA的介绍就掠过了吧,不是很赞同一些博主说是国内某人最先提出来,Bellm ...
- 链式前向星实现的堆优化dij求最短路模板
#include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
随机推荐
- [剑指Offer] 19.顺时针打印矩阵
[思路]本题关键在于 右->左 和 下->上 两个循环体中的判断条件,即判断是否重复打印. class Solution { public: vector<int> print ...
- hdu 2527 Safe Or Unsafe (哈夫曼树)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- BZOJ4602: [Sdoi2016]齿轮 DFS 逆元
这道题就是一个DFS,有一篇奶牛题几乎一样.但是这道题卡精度. 这道题网上的另一篇题解是有问题的.取对数这种方法可以被轻松卡.比如1e18 与 (1e9-1)*(1e9+1)取对数根本无法保证不被卡精 ...
- [洛谷P2568]GCD
题目大意:给你$n(1\leqslant n\leqslant 10^7)$,求$\displaystyle\sum\limits_{x=1}^n\displaystyle\sum\limits_{y ...
- [Leetcode] Reverse nodes in k group 每k个一组反转链表
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- [Leetcode] first missing positve 缺失的第一个正数
Given an unsorted integer array, find the first missing positive integer. For example,Given[1,2,0]re ...
- 【BZOJ 3195 】[Jxoi2012]奇怪的道路 装压dp
受惯性思维的影响自动把二进制状态认为是连与不连......... 我们这里二进制状态表示的是奇偶,这样的话我们f[i][j][k]表示的就是前i个城市用了j个边他前k个城市的奇偶状态,然后想想怎么转移 ...
- POJ1459:Power Network(多源点多汇点的最大流)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 31086 Accepted: 15986 题 ...
- ZooKeeper Watcher注意事项
zookeeper watch的定义如下:watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher. 需要注意三点: 1.一次性触发器 c ...
- VC++使用CImage在内存中Bmp转换Jpeg图片
之前写了一篇<VC++使用CImage在内存中Jpeg转换Bmp图片>,通过CImage实现了在内存中Jpeg转Bmp. 既然Jpeg能转Bmp,那CImage也支持Bmp转Jpeg,与上 ...