最短路径

ZOJ 1221 Risk(最短路径Dijkstra和Floyd算法)

巧了我就是萌 提交于 2019-11-26 19:41:24
Risk Time Limit: 2 Seconds Memory Limit: 65536 KB Risk is a board game in which several opposing players attempt to conquer the world. The gameboard consists of a world map broken up into hypothetical countries. During a player's turn, armies stationed in one country are only allowed to attack only countries with which they share a common border. Upon conquest of that country, the armies may move into the newly conquered country. During the course of play, a player often engages in a sequence of conquests with the goal of transferring a large mass of armies from some starting country to a

ACM集训第三周总结

為{幸葍}努か 提交于 2019-11-26 19:13:44
学习内容:图论算法,最小生成树(Kruskal,prim),最短路径(Dijkstra,bellman ford,Floyd),字典树,线段树,拓扑排序,并查集。 总结: 本周要学内容的也很多,所以也没有全部学完比如拓扑排序,种类并查集等。不过这周题目的思维难度没有上周的难,基本流程就是:看懂算法→记好模板→看懂题目→转化成图论模型→套用模板就能完成大部分的题啦。但是还是有很多写得很困难的题,D题blabla不知道是要求什么东西,看了题解才发现是要求最大路径是否有正环,跟一般的求最短路径完全相反。E题一开始用dijkstra求最短路径但也不知道怎么求出最小的最大跳跃距离,看了别人的思路才最到是用dijkstra的方法维护一个到某点的最小的最大跳跃距离d[]数组,而不是笼统地套用模板把d[]数组看成是到某点的最小路径,还有F题可能会有多个相同的边但权值不同,所以输入要处理一下,权值要是最小的才有效,实在有点坑。 一个问题可能有多种不同的算法可以求解,一般最小生成树我都用kruskal+并查集这样写的快效率高;最短路径如果没有负权的话就直接dijkstra,有负权则用SPFA,folyd最简单但也最容易超时,三重循环看着都感觉会TLE。其实kruskal还可以用优先队列优化 来源: https://www.cnblogs.com/megadeth/p/11330553.html

HDOJ 3790 最短路径问题 SPFA

佐手、 提交于 2019-11-26 17:40:33
因为没有对边判重,白白WA了好几次,注意输入时必须要对边判重 AC 187MS 8100K 1 #include <queue> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <memory.h> 5 using namespace std; 6 7 const int maxn = 1001 ; 8 const int INF = 0x3F3F3F3F ; 9 10 int a, b, d, p, nNum, mNum; 11 int dist[maxn], px[maxn], QM[maxn]; 12 int cost[maxn][maxn], g[maxn][maxn]; 13 14 void spfa( int sx, int tx) 15 { 16 int xx; 17 queue < int > q; 18 19 q.push(sx); 20 QM[sx]= 1 , dist[sx]= 0 , px[sx]= 0 ; 21 22 while (! q.empty()) 23 { 24 xx = q.front(); 25 q.pop(); 26 QM[xx] = 0 ; /* Took Away */ 27 28 for ( int i= 1 ; i<=nNum; ++ i) 29 { 30 if (dist

【转载】Amit’s A star Page 中译文

你离开我真会死。 提交于 2019-11-26 17:39:37
GameRes游戏开发资源网 http://www.gameres.com Amit's A star Page 中译文 Amit's A star Page中译文原文链接: http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht 译序 这篇文章很适合A*算法的初学者,可惜网上没找到翻译版的。本着好东西不敢独享的想法,也为了锻炼一下英文,本人译了这篇文章。 由于本人英文水平非常有限,六级考了两次加一块不超过370分,因此本译文难免存在问题。不过也算是抛砖引玉,希望看到有更多的游戏开发方面的优秀译作出现,毕竟中文的优秀资料太少了,中国的游戏开发者的路不好走。 本人能力有限,译文中有小部分词句实在难以翻译,因此暂时保留英文原文放在译文中。对于不敢确定翻译是否准确的词句,本人用圆括号保留了英文原文,读者可以对照着加以理解。 A*算法本身是很简单的,因此原文中并没有过多地讨论A*算法本身,而是花了较大的篇幅讨论了用于保存OPEN和CLOSED集的数据结构,以及A*算法的变种和扩展。 编程实现A*是简单的,读者可以用STL对本文中的伪代码加以实现(本人已花一天时间实验过基本的A*搜索)。但是最重要的还是对A*本身的理解,这样才可以在自己的游戏中处理各种千变万化的情况。 翻译本文的想法产生于2006年5月

最短路径变形 POJ 2253

痴心易碎 提交于 2019-11-26 15:48:57
Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sitting on another stone. He plans to visit her, but since the water is dirty and full of tourists' sunscreen, he wants to avoid swimming and instead reach her by jumping. Unfortunately Fiona's stone is out of his jump range. Therefore Freddy considers to use other stones as intermediate stops and reach her by a sequence of several small jumps. To execute a given sequence of jumps, a frog's jump range obviously must be at least as long as the longest jump occuring in the sequence. The frog distance

图学习笔记

送分小仙女□ 提交于 2019-11-25 20:15:53
1、图 图中的元素我们就叫作 顶点; 图中的一个顶点可以与任意其他顶点建立连接关系叫作 边; 跟顶点相连接的边的条数叫作 度 ; 边 有方向的图叫作 有向图 , 边 没有方向的图就叫作 无向图 ; 顶点的 入度 ,表示有多少条边指向这个顶点 ; 顶点的 出度 ,表示有多少条边是以这个顶点为起点指向其他顶点 ; 带权图 ,每条边都有一个权重 。 2、图的存储 2.1 邻接矩阵 对于无向图来说,如果顶点 i 与顶点 j 之间有边,我们就将 A[i][j] 和 A[j][i] 标记为 1; 对于有向图来说,如果顶点 i 到顶点 j 之间,有一条箭头从顶点 i 指向顶点 j 的边,那我们就将 A[i][j] 标记为 1。 对于带权图,数组中就存储相应的权重。 2.2 邻接表 每个顶点对应一条链表,链表中存储的是与这个顶点相连接的其他顶点 。 3、图的遍历 3.1 广度优先搜索(BFS) 广度优先搜索(遍历) :一种“地毯式”层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索 。( 求得的路径就是从 s 到 t 的最短路径 ) 算法实践图: 3.2 深度优先搜索(DFS) 假设你站在迷宫的某个岔路口,然后想找到出口。你随意选择一个岔路口来走,走着走着发现走不通的时候,你就回退到上一个岔路口,重新选择一条路继续走,直到最终找到出口。这种走法就是一种深度优先搜索策略 。 3

程序员必须掌握的核心算法有哪些?

为君一笑 提交于 2019-11-25 19:49:53
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我, 数据结构与算法应该要学习到哪个程度呢? ,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是 零散 的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家。大家也可以留言区补充。 一、算法最最基础 1、时间复杂度 2、空间复杂度 一般最先接触的就是时间复杂度和空间复杂度的学习了,这两个概念以及如何计算,是必须学的,也是必须最先学的,主要有最大复杂度、平均复杂度等,直接通过博客搜索学习即可。 文章推荐: 算法分析神器—时间复杂度 二、基础数据结构 1、线性表 列表(必学) 链表(必学) 跳跃表(知道原理,应用,最后自己实现一遍) 并查集(建议结合刷题学习) 不用说,链表、列表必须,不过重点是链表。 三分钟基础数据结构:如何轻松手写链表? 以后有面试官问你「跳跃表」,你就把这篇文章扔给他 2、栈与队列 栈(必学) 队列(必学) 优先队列、堆(必学) 多级反馈队列(原理与应用) 特别是优先队列,再刷题的时候,还是经常用到的,队列与栈,是最基本的数据结构,必学。可以通过博客来学习。相关文章: 三分钟基础知识:什么是栈?