程序解析
西海岸看日出
东北大学
展开
-
最长公共子序列和最长公共子串——C++
一、给定两个字符串S1和S2,求两个字符串的最长公共子序列的长度。输入样例ABCDAEBD输出样例3解释S1和S2的最长公共子序列为ABD,长度为3思路动态规划LCS(m,n)表示S1[0…m]和S2[0…n]的最长公共子序列的长度S1[m] == S2[n]: LCS(m, n) = 1 + LCS(m - 1, n - 1);S1[m] != S2[n]: LCS(m, n) = max(LCS(m - 1, n), LCS(m, n - 1))。#inc原创 2020-10-06 17:26:42 · 1131 阅读 · 0 评论 -
滴滴笔试毕业旅行——回溯法(dfs)
题目:题目描述:小滴正在筹划他的毕业旅行。他打算去找他的外国网友们,首先第一站是法国巴黎,但是去巴黎的路线有很多,交通工具也有很多可供选择。现在有一个结点数为n,边的条数为m的无向图表示小滴到巴黎的所有路线。其中小滴的家为结点s,巴黎为结点e,小滴出发时间为start,请问小滴最早什么时候能到达巴黎?输入描述单组输入,数字间有空格隔开。第一行两个整数:结点数n,边数m(n<=1000,m<=10000)。第二行到第m+1行每行各有三个整数:结点u,结点v,需要的时间ti原创 2020-09-14 17:53:26 · 449 阅读 · 0 评论 -
浪潮笔试摆石头——C++
沙滩按照线型摆放着n个大小不一样的球形石头,已知第i 个石头的半径为n,且不存在两个石头有相同的半径。为了使石头的摆放更加美观,现要求摆放的石头的半径从左往右一次递减。因此,需要对一些石头进行移动,每次操作可以选择一个石头,并把它放在剩下n- 1个石头在最左边或最右边。问最少需要操作多少次才能将这n个石头的半径变成升序?样例输入:54 1 2 5 3样例输出:2思路:实则题目就等于求出最长升序子字符串,但因为题目加了限制条件:每次可选择一块石头,并把它放在剩下n-1块石头的最左边或最右边。所以原创 2020-09-04 11:13:25 · 832 阅读 · 0 评论 -
快速排序——C语言实现
一、排序算法的基本分类:插入排序类:直接插入排序--------(改进)-------->希尔排序选择排序类:简单选择排序--------(改进)-------->堆排序交换排序类:冒泡排序--------(改进)-------->快速排序二、快速排序算法基本思想:利用分治法的思想,在序列中任选一个记录作为基准(由自己设定),以此基准将当前无序序列划分为左、右两个较小的...原创 2020-04-20 22:32:38 · 631 阅读 · 0 评论 -
归并排序——C语言实现
归并排序是利用归并的思想实现的排序方法。它的原理是假设初始化序列中有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1。然后两两归并,得到(n/2 + n% 2)个长度为2或1的有序子序列;再两两归并,…,如此重复,直到得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。一般用的归并排序就是2路归并排序。过程如下图所示:归并排序可以由递归实现,也可以由迭代实现。一、归并...原创 2020-04-20 11:29:02 · 387 阅读 · 0 评论 -
堆排序——C++实现
堆排序算法的步骤:例如大顶堆1、首先将要排序的数组构造成一个大顶堆,数组本身可以看作是一个完全二叉树的顺序存储结构,构建大顶堆是一个从下至上进行筛选的过程,从最后一个非终端结点(N/2)开始(当数组元素是从下标1开始存储的,最后一个非终端结点的下标就是N/2)。如果发现左右子结点的值大于父结点,则将两者互换,对每一个非终端结点筛选完成后就形成了一个大顶堆。2、取出堆首元素(此时为最大的元素)...原创 2020-04-18 16:28:06 · 306 阅读 · 0 评论 -
二叉排序树(二叉搜索树,二叉查找树)详细代码实现
//二叉排序数(二叉搜索树,二叉查找树)#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;#define end 32767 // 定义结束标志//结点结构typedef struct BiTNode{ int data; struct BiTNode *lchild, *...原创 2020-04-13 18:05:31 · 1330 阅读 · 0 评论 -
马踏棋盘(骑士周游问题)——回溯法
如图,在8*8国际象棋棋盘中,马的走法有八种。问题随便规定棋盘上的一点(如(2,0)),马开始走,由此点开始,走遍棋盘上的其他63个格子的路径,求此路径。思路用回溯法,一条路走下去,碰到死路就回头走,用到递归(类似于图的深度遍历);设计一个nextxy()函数,用来判断下面的八个点哪一个能走;print函数,输出位置;递归函数TracelChessBoard(),用tag来作为标...原创 2020-04-09 20:24:59 · 885 阅读 · 0 评论 -
双向链表 C语言实现
有头结点的双向链表如下图所示://双向不循环链表,有头结点#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<iostream>using namespace std;typedef int el...原创 2020-03-19 17:28:47 · 213 阅读 · 0 评论 -
STL函数对象(仿函数)与函数适配器
1、函数对象(仿函数)函数对象是c++中一种行为类似函数的对象,对它可以像调用函数一样使用。函数对象是泛化的函数,是重载了“()”运算符的类的对象。主要作用是作为STL算法的参数,为算法提供更细化的操作。使用STL的函数对象,需要包含头文件 <functional>。例如一个比较大小的仿函数:template<typename T> struct comp{...原创 2020-03-12 19:43:15 · 215 阅读 · 0 评论 -
归纳c++类访问权限问题(private、protected、public)
C++类成员(成员数据和成员函数)的访问权限主要有三种,public、private和protected。总体来说权限public>protected>private。1、private成员原创 2020-03-02 23:44:16 · 1637 阅读 · 0 评论 -
C语言中的位操作
运算符含义描述<<左移将一个数的各二进制位全部左移N位,高位舍弃,低位补0。>>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0。&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。l按位或两个相应的二进制位中只要有一个为1,该位的结果值为1,否则为0。~按...原创 2020-02-26 13:01:21 · 170 阅读 · 0 评论 -
C和C++中函数使用的不同点
一、返回值C中:如果函数未指定返回值类型,则默认为intc++中:如果一个函数没有返回值,返回值类型必须指定为void二、参数列表C中:如果函数没有指定参数列表,则默认可以接受任意多个参数C++中:有严格的类型检测,没有参数列表的函数默认为void,不接受任意参数三、缺省参数(即给参数一个默认值)C:不支持C++:支持(如果没有指定实参则使用缺省值,有则使用指定实参)1.默认实参...原创 2020-02-26 11:46:25 · 310 阅读 · 0 评论 -
C语言不同数据类型的混合运算
在c语言中,数据类型级别由低到高为(由存储长度决定):例如:int a;a = 'A' + 1.6;1、在运算过程中,如果参与运算的数据类型不同时,数据将由低类型转化为高类型,即’A’由char类型转换为double类型;(存储长度较短的转换为存储长度较长的,且不丢失精度)2、在赋值运算时,如果赋值号两边的数据类型不同,赋值号右边的类型将转换为左边的类型。如果右边的数据类型长度比左边...原创 2020-02-26 11:38:59 · 4781 阅读 · 0 评论 -
C语言中printf输出问题,和a++,++a的区别
转自 https://blog.csdn.net/seino_m/article/details/79121527转载 2020-02-18 18:28:37 · 1293 阅读 · 0 评论 -
C语言—字符串与字符数组,字符串数组与字符串指针的区别
字符串与字符数组字符串一定是一个char的数组,但char的数组未必是字符串。——以字符’\0’结尾的char数组就是一个字符串,但如果char数组没有以’\0’结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char数组。两者的区别:字符串:1、字符串赋初值用双引号引起来;2、以隐含的空字符\0结束,占用字节数+1,注意:1字节/字母,2字节/汉字;3、字符串可以...原创 2020-02-17 16:55:44 · 3433 阅读 · 2 评论 -
图的邻接矩阵存储—C语言
代码实现://图的邻接矩阵存储结构—用两个数组来表示图,一个一维数组存储图中的顶点信息,一个二维数组(称为邻接数组)存储图中的边或弧的信息。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <iostream>#define MAX_VERTI...原创 2019-09-23 15:07:33 · 2627 阅读 · 1 评论 -
图的邻接表存储—C语言
邻接表对应的,我们得到如下的结构:我们以无向图为例:写出相应的邻接矩阵:程序实现://图的邻接表方式存储—需要顶点表和边表。//顶点表包括整型/字符型结构的元素(顶点自身的值)和边表结构类型的指针;//边表包括整型/字符型结构的元素(顶点下标或权值)和本身结构体类型的指针;#define _CRT_SECURE_NO_WARNINGS#include<stdio.h...原创 2019-09-23 20:34:37 · 1980 阅读 · 0 评论 -
基于邻接矩阵的图遍历方式(深度优先+广度优先)—C语言
深度优先遍历: 类似与树的前序遍历。从图中的某个顶点v出发,访问此顶点,然后从v的未被访问到的邻接点进行遍历,直到图中所有和v有路径相通的顶点都被访问到(注:优先访问外层节点,访问到无新顶点时,会进行回退,访问未被访问过的分支顶点)。广度优先遍历: 类似于树的层序遍历。从图中的某个顶点w出发,让顶点w入队,然后顶点w再出队,并让所有和顶点w相连的顶点入队,然后再出队一个顶点t,并让所有和t相连但...原创 2019-09-25 20:24:05 · 23391 阅读 · 6 评论 -
基于邻接表的图遍历方式(深度优先+广度优先)—C语言
深度优先遍历: 类似与树的前序遍历。从图中的某个顶点v出发,访问此顶点,然后从v的未被访问到的邻接点进行遍历,直到图中所有和v有路径相通的顶点都被访问到(注:优先访问外层节点,访问到无新顶点时,会进行回退,访问未被访问过的分支顶点)。广度优先遍历: 类似于树的层序遍历。从图中的某个顶点w出发,让顶点w入队,然后顶点w再出队,并让所有和顶点w相连的顶点入队,然后再出队一个顶点t,并让所有和t相连但...原创 2019-09-25 20:30:13 · 7448 阅读 · 0 评论 -
c++ vector使用总结
vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间,自动改变vector向量的大小vector容器的下标是从0开始计数的, 也就是说, 如果vector容器的大小是n, 那么, 元素的下标是0~n-1对于vector容器的容量定义, 可以事先定义一个固定的大小, 事后, 可以随时调...原创 2019-08-14 16:44:26 · 303 阅读 · 0 评论 -
线索二叉树—C语言实现
线索二叉树的定义如下:https://www.jianshu.com/p/3965a6e424f5程序实现://线索二叉树#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <stdio.h>typedef char ElemType;typedef struct BITNODE //二叉树...原创 2019-09-19 16:20:53 · 502 阅读 · 0 评论 -
二叉树链—C语言实现
二叉树的具体定义如下:https://www.jianshu.com/p/bf73c8d50dc2代码实现://二叉树链—二叉树的链表描述#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <stdio.h>typedef char ElemType;typedef struct BITNO...原创 2019-09-19 16:14:06 · 312 阅读 · 0 评论 -
C++ 顺序表的类实现
1、顺序表的定义将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构,采用顺序存储结构的线性表简称为“ 顺序表”。 顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:Loc(ai)=Loc(a1)+(i−1)∗L,1≤i≤n其中,L是元素占用存储单元的长度。2、顺序表的基本操作(1)初始化:建立一个空的顺序表;(2)新建:新建一个顺序表;...原创 2019-08-30 15:57:57 · 2601 阅读 · 0 评论 -
C++ 线性表的结构体定义(顺序表和链式表)
线性表的结构体定义:1、顺序表的结构体定义typedef struct { int data[maxSize]; int length; } Sqlist;2、单链表结点的结构体定义typedef struct LNode{ int data; //存放结点数据域 struct LNode *next; //指向后继结点的指针 }LNode...原创 2019-08-30 15:51:02 · 2888 阅读 · 0 评论 -
C++ typedef的用法
typedef的用途: 为已有的数据类型重新命名。1、基本类型int a=10;//为整型重新命名typedef int ZS;ZS b=10;2、结构体的使用a、为结构体重新命名//ST---->等价于struct Studenttypedef struct Student{ int id; char sex;}ST;b、为结构体指针类型重新命名/...原创 2019-08-30 10:46:10 · 462 阅读 · 0 评论 -
C++将类写在头文件中
比如有个类ABC要在main.cpp内使用,创建两个文件 ABC.h,ABC.cpp。把类的声明都写在h里面,方法的实现写在cpp里面,然后在main.cpp内#include “ABC.h”,然后编译,如果是工程就把ABC都加到工程里,如果不是就要手动链接了。头文件只是提供声明,#include了头文件是保证main.cpp知道了接口。而链接才是把类ABC的代码加入到生成的可执行文件中。既要...原创 2019-08-26 16:03:55 · 4388 阅读 · 0 评论 -
使用ROS编写简单的主题发布者和主题订阅者
ROS官方中文教程:http://wiki.ros.org/cn/ROS/Tutorials/ 里面内容都很详细。这里,简单介绍ROS系统的主要操作步骤:一、安装并配置ROS环境教程如下:https://blog.csdn.net/qq_38236355/article/details/97820398二、创建ROS工作空间(catkin工作空间)打开终端:mkdir -p ~/cat...原创 2019-08-01 18:24:06 · 487 阅读 · 0 评论 -
深度学习之Caffe实战教程
一、原创 2019-04-25 17:43:37 · 393 阅读 · 0 评论 -
双目相机测距代码演示
双目测距的操作流程有四步:相机标定——双目校正——双目匹配——计算深度,具体内容参考 : https://blog.csdn.net/qq_38236355/article/details/88933839其中相机标定通常用matlab现成的工具箱进行标定,具体操作参考: https://blog.csdn.net/qq_38236355/article/details/89280633我们接...原创 2019-04-16 19:55:11 · 8030 阅读 · 10 评论 -
深度学习之卷积神经网络详解及代码演示
卷积神经网络广泛应用于计算机视觉领域。就处理图像数据来说,由于一幅图像有许多像素点和通道数,人工神经网络需要很多的权重值w,这样会大大损耗计算资源,也很容易造成过拟合现象。因此,产生了卷积神经网络,仅需很少的神经元就可以对图像进行很好地训练。...原创 2019-04-06 15:40:51 · 7265 阅读 · 0 评论 -
C++单链表的类实现
#include<iostream>using namespace std;template<class DataType>struct Node{ DataType data; Node<DataType> *next;};template<class DataType>class LinkList{publi...原创 2019-08-30 16:12:11 · 829 阅读 · 0 评论 -
单链表 c实现
转自 https://blog.csdn.net/sinat_40477296/article/details/78877547#include <stdio.h>#include <stdlib.h>#include <time.h>//创建单链表的成员 其实就是结点//link p; p就是一个结点typedef struct Link...转载 2019-09-02 21:07:38 · 129 阅读 · 0 评论 -
静态链表C语言实现
#include<iostream>using namespace std;#define MAXSIZE 100typedef int ElemType;//定义静态链表存储结构typedef struct Node{ ElemType data; int cur;} StaticLinkList[MAXSIZE];//对静态链表进行初始化相当于初始化数组...原创 2019-09-03 17:52:56 · 940 阅读 · 0 评论 -
队列的顺序存储结构——C实现
队列的顺序存储结构——数组实现;如果每次删除一个队列元素时,都需要把剩余元素左移一个位置,则时间复杂度会增加为O(n);如果每次删除一个队列元素,只把队首加1,时间复杂度会减少为O(1),但无法用到队首之前的空间;对于队列的顺序存储结构,一般采用循环队列,把数组视为一个环,把数组的两端连接。可以同时解决上述两个问题;但为了避免无法判断队列是空还是满,队列不能插满。代码实现:#defin...原创 2019-09-14 16:48:02 · 548 阅读 · 0 评论 -
队列的链式存储结构——C实现
队列的链式存储结构。队列常用链表来实现,简称为链队列。本次设计的链队列有头结点,并且队首指向头结点,队尾指向链尾结点。队列是先进先出的线性表,在队尾那一端插入元素,在队首那一端删除元素。c语言代码:#define _CRT_SECURE_NO_WARNINGS#include<stdlib.h>#include<stdio.h>typedef char El...原创 2019-09-14 14:38:45 · 339 阅读 · 0 评论 -
逆波兰计算器——完整版C实现
1、什么是逆波兰表达式?其定义为:https://baike.baidu.com/item/%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F/9841727?fr=aladdin逆波兰表达式又称为后缀表达式,这是计算机喜欢的输入形式。2、逆波兰计算器实现逆波兰计算器要分为两个步骤:(1)、将算数表达式(中缀表达式)转换为逆波兰...原创 2019-09-11 17:54:20 · 2465 阅读 · 1 评论 -
栈的链式存储结构——C语言
链式存储结构最大的好处就是没有空间的限制,通过指针指向将结点像一个链子一样把结点链接,那么栈的同样可以用于链式存储结构。栈因为只是栈顶来做插入和删除操作,所以比较好的方法就是将栈顶放在单链表的头部(与顺序栈相反),栈顶指针和单链表的头指针合二为一。另外栈顶在头部了,那么单链表的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。同样对于链栈来说,基本不存在栈满的情况,除非内存已经没有可...原创 2019-09-09 21:31:29 · 372 阅读 · 0 评论 -
栈的顺序存储结构——C实现
//栈的顺序存储结构,C语言实现//栈的建立、销毁、压栈、出栈、取栈顶元素操作#include<stdio.h>#include<stdlib.h>#include<time.h>#include<iostream>using namespace std;#define STACK_INIT_SIZE 10 //栈的总存储容量...原创 2019-09-09 15:16:20 · 224 阅读 · 0 评论 -
C语言中malloc()和free()函数的理解
关于malloc和free这两个函数,malloc的用法示例:int p=(int )malloc(2sizeof(int));它表示在堆中开辟一块大小为2sizeof(int)的一块内存空间,p指向这块内存空间的起始地址,malloc前面的(int*)表示这块空间用来存储int型数组。开辟了这块空间后,可以修改这个空间中的值,例如为p,(p+1)做赋值操作,如果再次使用malloc函数,例如再写...原创 2019-09-09 11:59:32 · 603 阅读 · 0 评论