
C++
文章平均质量分 65
Java硬件工程师
中国科学技术大学毕业,原支付宝Java开发工程师,立志做一名资深全栈工程师
展开
-
深度优先搜索之踩方格问题
问题描述有一个方格矩阵,矩阵边界在无穷远处,我们做如下假设:a.每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;b.走过的格子立即塌陷无法再走第二次c.只能向北、东、西三个方向走请问:如果允许在方格矩阵上走n步(n<=20),共有多少种不同的方案,2种走法只要有一步不一样,即被认为是不同的方案。输入允许在方格上行走的步数n(n≤20)。输出计算出的方案数量。样例输入2样例输出7解题思路递归从(i,j)出发,走n步的方案数,等于以下三项之和从(i+1,原创 2020-08-31 13:01:44 · 2417 阅读 · 0 评论 -
深度优先搜索之城堡问题
问题描述下图是一个城堡的地形图,请你编写一个程序,计算城堡一共有多少个房间,最大的房间有多大。城堡被分割成mxn(m<=50,n<=50)个方块,每个方块可以有4面墙。#代表墙,|-代表不是墙,走的通的就是一个房间输入程序从标准输入设备读入数据。第一行是两个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙, 2表示北墙, 4表示东墙, 8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被原创 2020-08-31 10:41:14 · 1946 阅读 · 0 评论 -
深度优先搜索之图的表示方法
邻接矩阵用一个二维数组G存放图,G[i][j]表示节点i和结点j之间的边的情况(如有无边,边方向,权值大小等)。遍历复杂度:O(n2) n为节点数目(每个结点都需要走一次,下一次不会再走,当考察一个结点的时候,会考察跟这个结点相邻的所有结点,在邻接矩阵中,如何考察,就要看数组G的第i行。每个点需要考察一行)邻接表每个结点V对应一个一维数组(Vector),里面存放从V连出去的边,边的信息包括另一顶点,还可能包含边权值在边稀疏的情况下,遍历整个图的时间复杂度就比较好,是O(n+e),n为节点数原创 2020-08-31 10:36:49 · 1672 阅读 · 0 评论 -
深度优先搜索之在图上寻找路径
寻路问题在图上如何寻找从1到8的路径一种策略:只要能发现没走过的点,就走到它。有多个点可走就随便挑一个,如果无路可走就回退,再看看有没有走过的点可走在图上如何寻找从1到8的路径运气最好:1->2->4->8运气稍差:1->2->4->5->6->8运气坏:1->3->7->9=>7->A=>7=>3->5->6->8(双向箭头表示回退)不连通的图,无法从结点1走到结点8完整的尝试过原创 2020-08-31 10:35:27 · 3029 阅读 · 0 评论 -
动态规划之神奇的口袋问题
问题描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40John现在有n(1<=n<=20)个想要得到的物品,每个物品的体积分别是a1,a2,…an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式输入输入的第一行是正整数n(1<=n<=20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出原创 2020-08-29 14:44:36 · 2151 阅读 · 1 评论 -
程序设计与算法----递归之神奇的口袋
问题描述问题描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40John现在有n(1<=n<=20)个想要得到的物品,每个物品的体积分别是a1,a2,…an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式输入输入的第一行是正整数n(1<=n<=20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数原创 2020-08-09 19:49:54 · 1718 阅读 · 0 评论 -
程序设计与算法----动态规划之最长上升子序列
问题描述给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的顺序一致。样例输入abcfbc abfcabprogramming contestabcd mnp样例输出420算法思想输入两个串s1,s2,设MaxLen(I,j)表示:s1左边的第i个字符形成的子串,与s2左边的j个字符形成的子串的最长公共子序列的长度(i,j从0开始算)MaxLen(i,j)就是本题的状态。假定len1=strlen(原创 2020-08-08 20:24:12 · 1820 阅读 · 0 评论 -
程序设计与算法----动态规划之最长公共子序列
问题描述一个数的序列ai,当a1<a2<…<as的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2,….an)我们可以得到一个上升的子序列(ai1,ai2,…,aik),这里1<=i1<i2<…ik<=N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等,这些子序列中最长的长度是4,比如子序列(1,3,5,8)你的任务,就是对于给定的序列,求出最长上升子序列的长度。输入数据输入的第一行是序列的长原创 2020-08-08 17:17:01 · 1740 阅读 · 0 评论 -
动态规划之数字三角形问题
问题描述在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或者右下走。只需要求出这个最大和即可。不必给出具体路径。三角形的行数大于1小于等于100,数字为0-99输入格式5 //三角形行数。下面是三角形73 88 1 02 7 4 44 5 2 6 5要求输出最大和样例输入5 73 88 1 02 7 4 44 5 2 6 5样例输出30算法思想73 88 1 02 7 4 44 5 2 6 5右原创 2020-08-05 17:01:35 · 2744 阅读 · 1 评论 -
递归之数字三角形问题
问题描述在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或者右下走。只需要求出这个最大和即可。不必给出具体路径。三角形的行数大于1小于等于100,数字为0-99输入格式5 //三角形行数。下面是三角形73 88 1 02 7 4 44 5 2 6 5要求输出最大和递归解决算法思想用二维数组存放数字三角形D(r,j):第r行第j个数字(r,j从1开始算)MaxSum(r,j):从D(r,j)到底边的各条路径中,最佳路径的数字原创 2020-08-05 16:16:08 · 2920 阅读 · 0 评论 -
分治之快速排序以及快速排序为何最快
算法思想数组排序任务可以如下完成:1)设k=a[0],将k挪到适当位置,使得比k小的元素都在k的左边,比k大的元素都在k的右边,和k相等的,不关心在k左右出现均可(O(n)时间完成)2)把k左边的部分快速排序3)把k右边的部分快速排序(假设运气比较好,每次基准元素被移动到中间,这样的话时间复杂度为O(nlogn))如何在O(n)的时间内将数组分成两半,一般在小于基准值,一般大于基准值?程序代码#include<iostream>using namespace std;int原创 2020-08-05 10:22:33 · 3105 阅读 · 0 评论 -
程序设计与算法----分治之归并排序
算法思想数组排序任务可以如下完成:1)把前一半排序2)把后一半排序3)把两半归并到一个新的有序数组,然后再拷贝回原数组,排序完成。时间复杂度:o(nlogn),空间复杂度o(n)(在前一半的排序中,又用到了归并算法,一直再分,直到待排序数组只有一个元素,因此归并排序需要用到递归来实现)程序代码#include<iostream>using namespace std;#define MAXSIZE 10//归并排序需要额外的一个数组来存储中间结果 int a[100],b原创 2020-08-04 12:17:06 · 1721 阅读 · 0 评论 -
程序设计与算法----递归之n皇后问题
问题描述例题:n皇后n皇后问题:输入整数n,要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击(即n个皇后可以横着吃,斜着吃,竖着吃。),输出全部方案。输入一个正整数N,则程序输出N皇后问题的全部摆法输出结果里的每一行都代表一种摆法。行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。皇后的行、列编号都是从1开始算。样例输入4样例输出2 4 1 33 1 4 2算法思想定义全局变量N,表示N个皇后要摆放,数组queenPos[100],表示最多是100个元素,第原创 2020-08-03 19:07:44 · 2149 阅读 · 0 评论 -
程序设计与算法----递归之放苹果问题
问题描述例题:放苹果把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问公有多少种不同的分法?5,1,1和1,5,1是同一种分法输入第一行是测试数据数目t(0<=t<=20),以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10输入第一行是测试数据的数目t(0<=t<=20)。以下每行均包含两个整数M和N。以空格分开,1<=M,N<=10对输入的每组数据M和N.用一行输出相应的K样例输入17 3样例输出8算原创 2020-08-03 16:09:43 · 2080 阅读 · 1 评论 -
程序设计与算法----递归汉诺塔问题
汉诺塔古代有一个梵塔,塔内有三个座A,B,C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移动到C座,但每次只能允许移动一个盘子,并且在移动的过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动的步骤。算法思想:这是一个典型的递归的问题,将A座盘子移动到C座,用B座做中转,这个问题可以分解成,先把n-1个盘子移动到B座,然后再把剩下的一个盘子移动到C座,然后再把B座上的n-1个盘子移动到C座,把n-1个盘子从A座移动原创 2020-08-03 10:39:40 · 2026 阅读 · 0 评论 -
程序设计与算法----递归之爬楼梯问题
爬楼梯树老师爬楼梯,它可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,它可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共有3种走法输入输入包含若干行,每行包含一个正整数N,代表楼梯级数,1<=N<=30输出不同的走法数,每一行输入对应一行样例输入5810样例输出83489#include<iostream>using namespace std;#define MAXSIZE原创 2020-07-28 21:17:36 · 2339 阅读 · 0 评论