随笔分类 -  算法

摘要:一、什么是模拟退火算法 1、爬山算法 在了解模拟退火算法之前,先来看一下爬山算法:爬山算法是一种贪心算法,该算法每次从当前的解空间中选取一个解作为最优解,直到达到一个局部最优解。假设函数f(x)的图像如下图: 现在使用爬山算法来求f(x)的最大值,若C为当前最优解,则爬山算法搜索到A就会停止搜索,这 阅读全文
posted @ 2018-08-05 22:27 ColdCode 阅读(30664) 评论(3) 推荐(1) 编辑
摘要:一、算法步骤 建立一个队列,初始时队列里只有起始点,再建立一个数组记录起始点到所有点的最短路径(该数组的初始值要赋为极大值,该点到它本身的路径赋为0,下面的模板中该数组为dist[])。然后执行松弛操作,用队列里有的点作为起始点去刷新到所有点的最短路,如果刷新成功且被刷新点不在队列中则把该点加入到队 阅读全文
posted @ 2017-12-04 22:51 ColdCode 阅读(335) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.51cto.com/ahalei/1387799 上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”。本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3 阅读全文
posted @ 2017-12-04 22:40 ColdCode 阅读(452) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.51cto.com/ahalei/1383613 暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示这条公路的长短。请 阅读全文
posted @ 2017-12-04 22:34 ColdCode 阅读(342) 评论(0) 推荐(0) 编辑
摘要:一、定义 1、生成树 在一个无向连通图中,如果存在一个连通子图包含原图中的所有结点和部分边,且这个子图不存在回路,那么该子图被称为原图的一棵生成树。 2、最小生成树 所有生成树中,边权和最小的那一棵(或那几棵)叫做最小生成树(MST)。 二、构造算法 有两种算法来构造最小生成树:普里姆(Prim)算 阅读全文
posted @ 2017-12-03 22:50 ColdCode 阅读(389) 评论(0) 推荐(0) 编辑
摘要:一、定义 并查集是一种树形的数据结构,用于处理一些不相交集合的合并以及查询问题。 二、操作 1、void make_set(int n) 含义:有n个元素,把这n个元素初始化成n个集合,每个集合包含1个元素。 2、int find_root(int x) 含义:查找元素x所在的集合,返回集合的根结点 阅读全文
posted @ 2017-12-02 11:31 ColdCode 阅读(255) 评论(0) 推荐(0) 编辑
摘要:题目链接 http://poj.org/problem?id=1573 题意 一个机器人在给定的迷宫中行走,在迷宫中的特定位置只能按照特定的方向行走,有两种情况:①机器人按照方向序列走出迷宫,这时输出机器人走出迷宫的步数;②机器人在迷宫中陷入了循环,这种情况要输出机器人陷入循环前所走的步数以及循环的 阅读全文
posted @ 2017-11-10 21:29 ColdCode 阅读(211) 评论(0) 推荐(0) 编辑
摘要:题目链接 http://poj.org/problem?id=2253 题意 给出青蛙A,B和若干石头的坐标,现在青蛙A要跳到青蛙B所在的石头上,求出所有路径中最远那一跳的最小值。 思路 Floyd算法的变形,将求两点之间的最短路改成求两点之间最大边权的最小值即可。 代码 注意点 1、由于距离是do 阅读全文
posted @ 2017-11-10 16:32 ColdCode 阅读(459) 评论(0) 推荐(0) 编辑
摘要:一、定义 哈夫曼树,又称最优树,是一类带权路径长度最短的树。首先有几个概念需要清楚: 1、路径和路径长度 从树中一个结点到另一个结点之间的分支构成两个结点的路径,路径上的分支数目叫做路径长度。树的路径长度是从树根到每一个结点的路径长度之和。 2、带权路径长度 结点的带权路径长度为从该结点到树根之间的 阅读全文
posted @ 2017-11-07 14:41 ColdCode 阅读(34962) 评论(1) 推荐(1) 编辑
摘要:一、定义 二叉堆是堆的一种,使用完全二叉树来实现。所谓完全二叉树,即高度为n的二叉树,其前n-1层必须被填满,第n层也要从左到右顺序填满。在二叉堆中,所有非终端结点的值均不大于(或不小于)其左右孩子的值。若非终端结点的值均不大于其左右孩子结点的值,这样的二叉堆叫做小根堆(下图中(b)),小根堆根结点 阅读全文
posted @ 2017-11-06 20:45 ColdCode 阅读(4019) 评论(0) 推荐(1) 编辑
摘要:一、定义 平衡二叉树,又称AVL树,它是一种特殊的二叉排序树。AVL树或者是一棵空树,或者是具有以下性质的二叉树: (1)左子树和右子树都是平衡二叉树; (2)左子树和右子树的深度(高度)之差的绝对值不超过1。 二、AVL树的C++实现 1、结点的定义 2、AVL树的操作 AVL树同二叉排序树一样, 阅读全文
posted @ 2017-11-05 10:17 ColdCode 阅读(22851) 评论(0) 推荐(4) 编辑
摘要:一、定义 二叉排序树,又叫二叉查找树,它或者是一棵空树;或者是具有以下性质的二叉树:1. 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;2. 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;3. 它的左右子树也分别为二叉排序树。 如下图所示: 二、二叉排序树的C++实现 阅读全文
posted @ 2017-11-04 14:36 ColdCode 阅读(37989) 评论(3) 推荐(4) 编辑
摘要:题目链接 "http://poj.org/problem?id=1970" 思路 题目的意思是判断五子棋棋局是否有胜者,有的话输出胜者的棋子类型,并且输出五个棋子中最左上的棋子坐标;没有胜者输出0. 这道题目是floodfill延伸而来,使用dfs求解,但这道题比普通的floodfill题目又多了一 阅读全文
posted @ 2017-11-03 16:53 ColdCode 阅读(330) 评论(0) 推荐(0) 编辑
摘要:题目链接 "http://poj.org/problem?id=1979" 思路 floodfill问题,使用dfs解决 代码 java include include include using namespace std; const int N = 20; char maze[N][N]; i 阅读全文
posted @ 2017-11-03 11:09 ColdCode 阅读(144) 评论(0) 推荐(0) 编辑

AmazingCounters.com
点击右上角即可分享
微信分享提示