![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
weixin_45435509
这个作者很懒,什么都没留下…
展开
-
分支限界算法--单源最短路径问题
给定带权有向图G=(V,E),其中每条边的权是非负实数。给定V中的一个顶点,称为源。现在要计算从源到所有其它各顶点的最短路长度,这里路的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。分析算法从优先队列中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。剪枝规则:如果从当前扩展结点i到顶点j有边可达,且从源出发,途经顶点i再到顶点j相应的路径...原创 2019-10-29 09:20:08 · 2351 阅读 · 1 评论 -
分支限界算法--迷宫问题
给出一个NM的迷宫图和一个入口、一个出口。编一个程序,打印一条从迷宫入口到出口的路径。这里黑色方块的单元表示走不通(用-1表示),白色方块的单元表示可以走(用0表示)。只能往上、下、左、右四个方向走。如果无路则输出“no way.”。*【深搜参考程序】#include <iostream>using namespace std;int n,m,desx,desy,soux,...原创 2019-10-29 09:07:05 · 1972 阅读 · 0 评论 -
分支限界算法--步数最少问题
在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(100100)的围棋盘上任选两点A、B,A点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左...原创 2019-10-29 08:58:22 · 408 阅读 · 0 评论 -
分支界限算法--细胞个数问题
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。【算法分析】⑴从文件中读入m*n矩阵阵列,将其转换为boolean矩阵存入bz数组中;⑵沿bz数组矩阵从上到下,从左到右,找到遇到的第一个细胞;⑶将细胞的位置入队h,并沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置bz数组置为false;⑷将h队的队...原创 2019-10-29 08:34:57 · 582 阅读 · 0 评论 -
回溯算法--- 旅行商问题(TSP问题)
是指一销售商从n个城市中的某一城市出发,不重复地走完其余n-1个城市并回到原出发点,在所有可能的路径中求出路径长度最短的一条。本题假定该旅行商从第1个城市出发。输入对每个测试例,第1行有两个整数:n(4≤n≤10)和m(4≤m≤20 ) ,n是结点数,m是边数。接下来m行,描述边的关系,每行3个整数:(i,j),length,表示结点i到结点j的长度是length。当n=0时,表示输入结束。...原创 2019-10-27 10:15:00 · 2005 阅读 · 0 评论 -
回溯算法---n皇后问题
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。由于棋盘的每列/行只有一个皇后,所以可以用一维向量X( x1, x2, …, xn),其中xi∈{1, 2, …, n},表示第i列皇后所在的行x[i],即解空间的每个结点都有n个儿子,因此解空间的大小为nn,这是一棵子集树。n皇后问题回溯算法的数据结构#define N...原创 2019-10-27 10:09:03 · 695 阅读 · 0 评论 -
回溯算法----图的m着色问题
给定无向连通图G=(V, E)和m种不同的颜色,用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中相邻的两个顶点有不同的颜色?图的m着色问题回溯算法的数据结构#define NUM 100int n; //图的顶点数量int m; //可用颜色数量int a[NUM][NUM]; //图的邻接矩阵int x[NUM]; //当前的解向量int sum...原创 2019-10-27 10:05:19 · 614 阅读 · 0 评论 -
回溯算法---0-1背包问题
给定一个物品集合s={1,2,3,…,n},物品i的重量是wi,其价值是vi,背包的容量为W,即最大载重量不超过W。在限定的总重量W内,我们如何选择物品,才能使得物品的总价值最大。0-1背包问题回溯算法的数据结构#define NUM 100int c; //背包的容量int n; //物品的数量int cw; //当前重量int cv; //当前价值int ...原创 2019-10-27 09:58:07 · 302 阅读 · 0 评论 -
回溯算法---装载问题
给定n个集装箱要装上一艘载重量为c的轮船,其中集装箱i的重量为wi。集装箱装载问题要求确定在不超过轮船载重量的前提下,将尽可能多的集装箱装上轮船(贪心算法中的装载问题讨论的是装载件数;本题讨论的是最大装载重量。)由于集装箱问题是从n个集装箱里选择一部分集装箱,假设解向量为X(x1, x2, …, xn),其中xi∈{0, 1}, xi =1表示集装箱i装上轮船, xi =0表示集装箱i不装上轮船...原创 2019-10-27 09:50:44 · 714 阅读 · 0 评论 -
回溯算法解决素数环问题
素数环:从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数【算法流程】1、数据初始化;2、递归填数:判断第i个数填入是否合法;A、如果合法:填数;判断是否到达目标(20个已填完):是,打印结果;不是,递归填下一个;(剪枝条件)B、如果不合法:选择下一种可能;#include<cstdio>#include<iostream>#include&l...原创 2019-10-27 09:43:23 · 569 阅读 · 0 评论 -
回溯算法
以深度优先的方式系统地搜索问题的解的方法称为回溯法。可以系统地搜索一个问题的所有解或任意解。回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。回溯法的基本思想在生成解空间树时,定义以下几个相关概念:1.活结点:如果已生成一个结点而它的所有儿子结点还没有全部生成,则这个结点叫做活结点。2.扩展结点:当前正在生成其儿子结点的活结点叫扩展结点(正扩展的结点...原创 2019-10-27 09:40:13 · 264 阅读 · 0 评论 -
背包问题(可分割)
给定一个载重量为M的背包,考虑n个物品,其中第i个物品的重量 wi ,价值vi (1≤i≤n),要求把物品装满背包,且使背包内的物品价值最大。如果物品可以分割,则称为背包问题(贪心算法)。为方便计算,建立如下的数据结构,表示物品的参数:struct bag{int w; //物品的重量int v; //物品的价值double c; //单位重量的价值,v/w}a[1001]...原创 2019-10-15 16:56:43 · 3508 阅读 · 0 评论 -
活动安排问题
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在半开时间区间[si ,fi )内占用资源。若区间[si ,fi )与区间[sj,fj )不相交,则称活动i与活动j是相容的。当 si ≥ fj 或 sj ≥ fi ...原创 2019-10-15 16:51:19 · 562 阅读 · 0 评论 -
贪心算法
贪心算法总是作出在当前看来最好的选择。贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。贪心算法和动态规划算法的比较这两种算法...原创 2019-10-15 16:44:49 · 106 阅读 · 0 评论 -
最长单调递增子序列
设计一个O(n2)时间的算法, 找出由n个数组成的序列的最长单调递增子序列。输入: 第1个整数n(0<n<100),表示后面有n个数据,全部为整数。输出: 输出最长单调递增子序列的长度;分析:用数组b[0:i]记录以a[i] (0≤i<n) 为结尾元素的最长递增子序列的长度。序列a的最长递增子序列的长度为:max {b[i]} (0≤i<n)显然,b[i]满...原创 2019-10-15 16:37:20 · 417 阅读 · 0 评论 -
0-1背包问题(物品不能分割)
给定一个物品集合s={1,2,3,…,n},物品i的重量是wi,其价值是vi,背包的容量为W,即最大载重量不超过W。在限定的总重量W内,我们如何选择物品,才能使得物品的总价值最大。如果物品不能被分割,即物品i要么整个地选取,要么不选取;不能将物品i装入背包多次,也不能只装入部分物品i,则该问题称为0-1背包问题。#include<cstdio>using namespace s...原创 2019-10-15 16:33:48 · 502 阅读 · 0 评论 -
最长公共子序列
若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的...原创 2019-10-15 16:21:00 · 268 阅读 · 0 评论 -
矩阵连乘问题
已知:给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,计算:这n个矩阵的连乘积A1A2…An所需要的乘法运算的次数最小值。1.分析最优解结构将矩阵连乘积AiAi+1…Aj 简记为A[i:j], 这里i≤j;考察计算A[1:n]的最优计算次序。设这个计算次序在矩阵Ak和Ak+1之间将矩阵链断开,1≤k<n则其相应完全加括号方式为(A1A2…Ak)(Ak+1Ak+2...原创 2019-10-15 16:08:14 · 837 阅读 · 0 评论 -
动态规划
一、动态规划的基本思想动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。我们希望找到具有最优值的解。基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。二、动态规划问题的特征动态规划算法的有效性依赖于问题本身所具有的两个重要性质:1.最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质...原创 2019-10-15 15:48:53 · 184 阅读 · 0 评论 -
半数集问题
要求找出具有下列性质的数的个数(包含输入的自然数n):先输入一个自然数n(n<=500),然后对此自然数按照如下方法进行处理:1.不作任何处理;2.在它的左边加上一个自然数,但该自然数不能超过原数字的一半;3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.如输入6,则有6162612636136分析:#include <iostream> ...原创 2019-10-15 15:32:29 · 104 阅读 · 0 评论 -
循环赛日程表
循环赛日程表问题,设有n=2k个选手要进行循环赛,设计一个满足以下要求的比赛日程表:1.每个选手必须与其他n-1个选手各赛一次;2.每个选手一天只能赛一次;3.循环赛一共进行n-1天。#include <iostream>using namespace std;#define MAX 100int a[MAX][MAX];void Copy(int tox, int t...原创 2019-10-15 15:15:02 · 101 阅读 · 0 评论 -
二分搜索技术
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。适用分治法求解问题的基本特征:1.该问题的规模缩小到一定的程度就可以容易地解决;2.该问题可以分解为若干个规模较小的相同问题;3.分解出的子问题的解可以合并为原问题的解;4.分解出的各个子问题是相互独立的。很显然此问题分解出的子问题相互独立,即在a[i]的前面或后面查找x是独立的子问题,因此满足分治法的第...原创 2019-10-15 15:06:14 · 225 阅读 · 0 评论 -
递归与分治策略
**递归的概念**直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。在计算机算法设计与分析中,使用递归技术往往使函数的定义和算法的描述简洁且易于理解。递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。注意:在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口,否则将无限进行下去(死锁)。递归...原创 2019-10-15 14:53:44 · 116 阅读 · 0 评论 -
整数划分问题
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。例如正整数6有如下11种不同的划分:6;5+1;4+2,4+1+1;3+3,3+2+1,3+1+1+1;2+2+2,2+2+1+1,2+1+1+1+1;1+1+1+1+1+1。分析:(1)整数6的划分方法数 =最大...原创 2019-10-15 14:42:48 · 194 阅读 · 0 评论 -
STL简介
STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。所有C++编译器和所有操作系统平台都支持的一种库。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。STL组成1)容器(Container)2)迭代器(Iterator)3)算法(Algorithm)4)函数对象(Function object)5)适配器...原创 2019-09-20 20:07:39 · 97 阅读 · 0 评论 -
算法设计与分析--昆虫繁殖
科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵).问过Z个月以后,共有成虫多少对?0=<X<=20,1<=Y<=20,X=<Z<=50分析:每个月都有成虫产卵。虫卵经过两个月才能变成成虫,产卵。每...原创 2019-09-20 19:29:55 · 778 阅读 · 0 评论 -
算法设计与分析--蜜蜂路线问题
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,M<N,有多少种爬行路线?算法分析:f[]:爬到i位置的方法数递归关系分析:f[i]=f[i-1]+f[i-2]递推边界:f[m]=1(爬行起点方法数为0)f[m+1]=1(爬行起点到达相邻的下一个蜂巢的爬行方法数为1)#include <iostr...原创 2019-09-20 19:26:50 · 1312 阅读 · 0 评论 -
算法设计与分析--猴子吃桃
猴子第一天采摘了一些桃子,第二天吃了第一天的一半多一个,第三天吃了第二天的一半多一个…直到第十天就剩下一个。问:猴子第一天摘了多少桃子?用递推方法实现:递推关系:f(n)=f(n-1)/2-1f(n-1)=(f(n)+1)*2边界条件:f(10)=1#include <iostream>using namespace std;int main(){ int ...原创 2019-09-20 19:23:26 · 717 阅读 · 0 评论 -
**算法设计与分析---数字三角形问题**
算法设计与分析—数字三角形问题请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。 1、 一步可沿左斜线向下或右斜线向下走; 2、 三角形行数小于等于100;3、 三角形中的数字为0,1,…,99;测试数据通过键盘逐行输入,如上例数据应以如下所示格式输入:573 88 1 02 7 4 44 5 2 6 5...原创 2019-09-20 19:18:55 · 716 阅读 · 1 评论