
算法-最短路径算法
最短路径算法
键盘上的艺术家w
努力奋斗
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu1224 spfa 最大路
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6998 Accepted Submission(s): 2293 Problem Description Weiwei is a原创 2017-07-17 21:29:51 · 310 阅读 · 0 评论 -
hdu2962 限制最短路+枚举
题意:n个点m条边,每条边有两个权,一个是路的长度,一个是路限制了货车运输的高度。最后一行给出起点,终点,和这部车子可以运输货物放的最大的高度。 思路:这里的枚举限制高度,可以过,高度从大枚举到小,可以过600ms 如果二分的话更快。 #include #include #include #include #include using namespace std; #define INF 99原创 2017-07-26 15:56:26 · 307 阅读 · 0 评论 -
hdu6071
/*现在有4个点,我们一开始在点2处 ,我们希望最终也回到点2处 ,问我们怎样走,使得总路径和大于等于K并且最小。 思路: 我们知道,我们可以选以2为起点,1作为另一个点(或者是3的话也是相同的道理),使得我们的主人公一直徘徊在这条路径上,那么我们最终的Ans,可以表示为2*W(1,2)+Len这里Len的长度明显在区间:【0,2*W(1,2)】之间,那么我们就去跑一个同余的最短路即可。 那原创 2017-08-10 20:12:30 · 490 阅读 · 0 评论 -
hdu2807 矩阵乘法建图加 佛洛依德
/* 题意:给你n个m*m的矩阵,如果A矩阵*B矩阵==c矩阵,就说明A-->C有一条路权为1的路。 然后输入x 代表x 次询问,询问两点之间的距离,如果能到则输出他们的距离,否则就输出sorry; 思路:先用矩阵乘法建立图。然后跑一次 佛洛伊德即可。 */ #include #include #include #include #include using namespace std; #def原创 2017-07-26 19:20:49 · 246 阅读 · 0 评论 -
hdu3191 次最短路
跟hdu1688一样的求次最短路。代码上有详细注释。/* 题意:给你N个点M条有向边,开始点s,终点e,求 s到e的次最短路,输出次最短路的长度和条数 */ #include #include #include #include using namespace std; #define MAX 1100 #define INF 999999999 struct edge { int fro原创 2017-07-26 19:42:06 · 375 阅读 · 0 评论 -
hdu2923 最短路
题意;给你n个城市k辆破车m条单项路,给你起点给你破车的城市的那个点,要你求从起点去运破车回到起点所花费的最短路程。把k辆破车一共花费的路程加起来输出。 用map建图,然后佛洛依德算法即可。 代码: #include #include #include #include #include #include using namespace std; #define INF 999999999原创 2017-07-27 13:42:43 · 244 阅读 · 0 评论 -
csu1106 记忆化搜索+最短路
/* 中文题意就不说了,就是求最短路,从左上角到右下角的最短路的条数。 思路:因为他是要对称走的话,我们可以这样考虑,将正方形对折。把他们 的权值加起来。 然后从右下角到对角线的就是从右下角到左上角按对称走的最短路径了。 然后求出(n,n)点到其他点的最短路径,然后记忆化搜索,搞一下,就能过了 */ #include #include #include #inclu原创 2017-08-12 15:44:46 · 330 阅读 · 0 评论 -
hdu6152 Friend-Graph
思路:直接暴力即可~~~ 开一个map【3000】【3000】的数组,开int超内存,要开短整型。 如果两人之间有朋友关系那么就将他们连一条边,如果任意三个人之间没有边,那么就是坏团; 如果任意三个人之间都有边,那么也是坏团队。否则就是好的。 /* 2017cmcc网络赛; 题意:给定一张图,假如有任意三个点或三个点以上有两条边那么这个图就是个 Bad Team! 或者有 任意三点直接没有原创 2017-08-20 08:09:18 · 396 阅读 · 0 评论 -
hdu4784 SPFA
题意:给你一个图要你在规定时间内从第一个点到n个点的赚的最多的钱。 一开始你有R元钱,你可以背的动B包盐,一共有K个平行空间,给你T的时间。 n个点m条边。每个点除了1和n点不能买盐卖盐,其余点都可以买盐卖盐,什么都不干。一开始在第0个平行空间里 每一步只能做一件事,就是到与这个点相连的点去买盐卖盐或者什么都不干,还可以移动到第(i+1)%k(花费1个单位的时间) 个平行空间里的相对位置去原创 2017-08-22 19:13:04 · 348 阅读 · 0 评论 -
hdu 4552 湫湫系列故事——过年回家 腾讯马拉松~~~~
/* 题意:就是求最短路了~~~。 思路:根据题意建好图,然后跑一次最短路,求出硬座的最少的花费,如果到不了,则卧铺肯定也到不了。直接输出-1; 否则再求卧铺的最短路,然后比较两个哪个小,输出小的即可。 */ #include #include #include #include using namespace std; #define INF 999999999 #define MA原创 2017-08-09 19:58:14 · 357 阅读 · 0 评论 -
hdu Invade the Mars(侵入火星)
Invade the Mars Time Limit : 5000/2000ms (Java/Other) Memory Limit : 365768/165536K (Java/Other) Total Submission(s) : 7 Accepted Submission(s) : 2 Font: Times New Roman | Verdana | Georg原创 2017-07-25 15:52:10 · 518 阅读 · 0 评论 -
hdu 1535 Invitation Cards spfa求最短路,反向建图再来一次
/* 题意,从1点派人去其他点,然后求这些人走的最短路径。然后再求他们回来的最短路径,路是单向的。 求1到其他路的最短路径用spfa算法即可,然后其他路到1的最短路,就直接将边反过来建图,求得就是; 我也不知道为啥求得就是,我正这算了下,还真tm是 才知道。 */ #include #include #include #include #include using namespace std; #原创 2017-07-18 22:23:05 · 306 阅读 · 0 评论 -
hdu1688 求次最短路得个数,和次最短路的个数
题意:输入ti组数据,n个点m调边,要你求从给定最后两个数据,a到b的最短路径的条数+次最短路径(只能是比最短路多1的次最短路)的条数; 这里用的 是djs算法,才知道djs还有这么个算法 是怎么求得呢~ #include #include #include #include using namespace std; #define MAX 1100 #define INF 99999999原创 2017-07-22 15:29:10 · 483 阅读 · 0 评论 -
hdu1690 floyd
题意:求两点之间的最小花费。 题目开始给了个表,第一行八个数就是给的表,前四个数是距离,后四个点是花费,表示超过第一个点的距离就是对应第一个花费。 第二行是n和m,后面n行是 n个点的距离,他们都是在x轴上的距离距离0点的距离, 思路 先算出各个点的距离根据距离得到花费,然后用floy求最小花费,这里都要用long long int 才可以,不然会出错,然后点有可能到负数那边去。 代码:原创 2017-07-22 17:10:16 · 239 阅读 · 0 评论 -
hdu1839 spfa+二分查找
这个题~~~~当时没做出,看了别人才慢慢理解的; 题意讲的是给定一个时间 求从1到n点花费的在那个给定时间内c最小的值。 输入输出:t组数据 第二行是 n个点m条边 t是时间限制。 后面的m行是 从a到b的重量为c,花费的时间为x; 就是求在规定限制时间内,求得一跳路的上的重量最小,但是跟其他路比起来这个重量最大。原创 2017-07-22 23:32:47 · 296 阅读 · 0 评论 -
hdu2112
题意中文题就不用说啦哈 思路:就是迪杰斯特拉,SPFA都可以。然后注意的是 起点和终点一样就得输出0; 借这个题熟悉了下 MAP的用法 美滋滋~~~~~~~ #include #include #include #include #include #include #include using namespace std; #define INF 999999999 struct edge原创 2017-07-24 10:26:37 · 465 阅读 · 0 评论 -
hdu2145
/* 题意:n个城市,k个人,m条路,然后给定一个重点,然后给出k个人的起点,然后给出k个人走路的速度,要你求最快速到达的那个人的编号,如果速度相同则输出距离远的 如果距离相同则输出编号大的;是有向边; 思路:跟之前做过那个派人去守仓库的那个题也是一样的有向边,求派人去仓库的最短路,求那些人回来的最短路,这里也是一样,就是求其他人来起点的最短路,然后在计算 得出最短的即可。 */ #include原创 2017-07-24 15:50:15 · 294 阅读 · 0 评论 -
hdu2326 枚举高度差和两两高度之间的组合出来的差
题意:给你n个点的海拔,m跳变,每个点之间的路,求1到n的最平缓的路,什么叫最平缓的路呢,最高海拔与最低海拔相差的越近越好。 一开始我英文水平不行读不懂英文题意,就看到网上用二分枚举,但是我感觉这题不太好用二分枚举,因为枚举到那个高度,又要枚举到他其他的组合,然后我没用二分枚举,用了个直接遍历,前面也是有一道枚举的题目跟这题目差不多。hdu1839,跟这个是一样的。 思路:首先求出任意两个海拔原创 2017-07-24 20:26:44 · 274 阅读 · 0 评论 -
hdu2433 最短路+思维
题意:给你n个点m条双向边,边的权值为1,要你求除去第i条边后任意两点的最短路的权值的和。 思路:先求点到其他点的最短路并且把路径记录下来,如果直接除去一条边求一次任意两点的最短路那肯定超时了,如果这条边在这个点到其他点最短路路的边中,那么去掉这条边,就对原来的最短路径有影响,那么最短路径就要重新算,如果这条边不在原来的最短路径中,那么直接就跟原来的最短路是一样的,也就没必要在重新求了,加上输出原创 2017-07-24 23:01:49 · 599 阅读 · 0 评论 -
csu1808 bfs +优先队列
ICPCCamp 有 n 个地铁站,用 1,2,…,n 编号。 m 段双向的地铁线路连接 n 个地铁站,其中第 i 段地铁属于 ci 号线,位于站 ai,bi 之间 ,往返均需要花费 ti 分钟(即从 ai 到 bi 需要 ti 分钟,从 bi 到 ai 也需要 ti 分钟)。 众所周知,换乘线路很麻烦。如果乘坐第 i 段地铁来到地铁站 s,又乘坐第 j 段地铁离开地铁站 s,那么需要额外花费原创 2017-08-23 21:04:55 · 519 阅读 · 0 评论