动态规划之最长公共子序列问题引入手写解析代码实现(C/C++)/*动态规划算法:最长的公共子序列 日期:2021/1/28 编码:高万禄 */#include<iostream>#include<vector>#include<cstdlib>using namespace std;//求解最长公共子序列函数 void LCSL(string&s1,string&s2,int**c,int**b){ //求解c
程序输出样例s1: familys2: frames1: familys2: frame编辑距离: 4d[][]:0 1 2 3 4 51 0 1 2 3 42 1 1 1 2 33 2 2 2 1 24 3 3 3 2 25 4 4 4 3 36 5 5 5 4 4--------------------------------Process exited after 10.78 seconds with return val
问题引入游艇租赁规则游艇租赁价格表代码实现#include<iostream>#include<cstdlib>using namespace std;#define N 1000int price_map[N][N];//价格表int real_price[N][N];//最优价格int strategy[N][N];//策略选择//打印解决方案 void print(int i,int j){ if(strategy[i][j]==0){ cou
问题引入代码实现//问题:矩阵连乘//日期:2021/2/1//编码:高万禄#include<iostream>using namespace std;#define N 1000//最多N-1个矩阵int matrix_data[N];int mul_num[N][N],strategy[N][N];//发现策略信息void matrix_mul(int&matrix_num){ //置空信息矩阵 for(int i=0;i<N;i++){ for
问题引入代码实现#include<iostream>using namespace std;#define N 1000int map[N][N];//图的邻接矩阵int strategy[N][N];//记录i j 中间的最优割点int m[N][N];//记录i j之间切割的最优权重 //三角切割 void convex_triangular_cutting(int n){ //初始化最优权重与策略矩阵 for(int i=0;i<n;i++){ stra
问题引入代码实现#include<iostream>using namespace std;#define N 1000#define INF 99999//无穷 int stones[N];//存储每堆石子数量 int Min[N][N],Max[N][N];int sum[N];//计算1 - i堆的石子和 //公路玩法 void highway(int n){ //初始化Min Max矩阵 for(int i=1;i<=n;i++){ Min[i][i]
动态规划之01背包问题递归式代码实现#include<iostream>using namespace std;#define SIZE 5//有SIZE个物品#define LoadingCapacity 10 //装载能力 int Weight[SIZE+1]={0,2,5,4,2,3};//重量 2,5,4,2,3int Value[SIZE+1]={0,6,3,5,4,6};//相应物品的价值 6,3,5,4,6int C[SIZE+1][LoadingCapacit
动态规划之最优二叉搜索树问题引入代码实现/*算法:最优搜索二叉树(动态规划法)编码人员:高万禄日期:2021/3/13*/#include<iostream>#include<cstdlib>#include<cmath>//输入Nint scanfN(void){ int temp; std::cin>>temp; if(temp>0){ return temp; }els
任务描述本关任务:给定N个物品和一个背包,背包的容量为W, 假设背包容量范围在[0,15],第i个物品对应的体积和价值分别为W[i]和v[i]。各种物品的价值和重量如下:物品编号 1 2 3 4 5重量W 3 4 7 8 9价值V 4 5 10 11 13求: 如何选择装入背包的物品,使得装入背包的物品的总价值为最大。相关知识为了完成本关任务,你需要掌握:1.动态规划原理的方法;2.0/1背包问题。编程要求按动态规划原理求0/1背
#include<iostream>using namespace std;/*冒泡排序是一种贪心算法策略每次总大问题中选择一个局部最优解然后问题规模进一步减小解决子问题的方法和上一次解决问题方法是一样的*/ void function(int*list,int n){ int i=0,j=0; bool flag=0; for(i=0;i<n;++i){ flag=0; for(int j=0;j<n-i-1;j++){ if(list[j]>
趣味故事问题:假设山洞有n种宝物,每种宝物有一定重量w和相应价值v毛驴运载能力有限,只能运走m重量的宝物,一种宝物只能拿走一样,宝物可以分割,怎样才能使毛驴运走宝物的价值最大呢?代码实现:#include<iostream>using namespace std;//第一眼看背包问题怎么和最优装载问题有些相似呢//它们都可以利用贪心策略来求解 //局部最优://选择性价比最大的宝物 int main(int argc,char**argv){ int i=0,j=0
问题引入代码实现//会议时间表//会议 1 2 3 4 5 6 7 8 9 10//开始时间 8 9 10 11 13 14 15 17 18 26 //结束时间 10 11 15 14 16 17 17 18 20 19//贪心策略:局部最优解,选择结束最早的//相容且最早结束#include<iostream>using namespace std;struct Meeti
问题引入迪科斯彻单源最短路径代码实现//迪科斯彻最短路径算法(单源最短路径)#include<iostream>using namespace std;//顶点个数const int CITY = 5;//定义无穷const int INF = 1000;//使用二维数组存储邻接矩阵//在此我们直接在源代码中添加邻接矩阵信息//为了是弄懂程序流程而非实际问题int map[CITY][CITY]={{INF,2,5,INF,INF},{INF,INF,2,6,INF
问题引入哈夫曼树构建及其编码输出代码实现//哈夫曼树及其编码 #include<iostream>#include<cstdlib>#include<vector>using namespace std;//定义节点抽象数据结构struct HuffNode{ float weight;//节点权重 int parent;//节点的父节点下标 int lchild;//节点的左孩子下标 int rchild;//节点的右孩子下标 cha
问题引入Prim生成最小树算法(邻接矩阵存储图)代码实现/*Create by Wanlu Gao* 2021/1/21 * 实现功能:* 在此程序中实现的为邻接矩阵存储图Prim最小生成树*/#include<iostream>#include<cstdlib>using namespace std;//定义无穷const int INF=9999; //存储图的顶点数 const int map_dot_num=7;//初始化邻接矩阵const i
#include <opencv2\opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ Mat img = imread("./test.jpg"); cvtColor(img, img, CV_BGR2GRAY); for (int i = 0; i < img.rows; ++i) { for (int j = 0; j < img.col
#include <opencv2\opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ Mat a = imread("./a.jpg"); Mat b = imread("./b.jpg"); //要求a与b的大小应该相等 Mat out; addWeighted(a, 0.5, b, 0.5, 0.0, out); imshow("out",out)
#include <opencv2\opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ Mat a = imread("./a.jpg"); Mat output = Mat::zeros(a.size(), a.type()); //定义一个新的Mat对象大小类型与a相同 //对每个Mat的像素进行处理 for (int i = 0; i < a.
#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;int main(int argc, char** argv) { Mat img = imread("./test.png"); Mat element = getStructuringElement(MORPH_RECT, Size(3,3)); //getStructuringElement()函
//opencv滑动条的创建//以阈值操作为例子#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;Mat img = imread("./test.jpg");int m = 127;void bar(int,void*) { cout << m << endl; threshold(img, img, m, 255, T
《开操作》先腐蚀后膨胀可以去掉小的对象,例如黑色背景中,有一个白色的大矩形,还有一些小的白色的区域,经过开操作哪些小的白色区域将会变为背景色。《闭操作》先膨胀后腐蚀可以填充很小的洞,例如原来的图像背景色为黑色,有一个白色矩形中有一个黑色的小洞,则经过比操作中间那个黑色的小洞将会被填充。相关APImorphologyEx(src,dest,CV_MOP_BLACKHAT,kernel);-Mat src-输入图像-Mat dest-输出图像-int OPT——CV_MOP_OPEN /
//形态学操作#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;int main(int argc, char** argv) { const char* file = "./12.png"; Mat img = imread(file); cvtColor(img, img, CV_BGR2GRAY); threshold(img, img, 1
相关APIpyrUp(Mat,输出Mat,Size(cols2,row2));//放大多少倍pyrDown(Mat,输出Mat,Size(cols/2,rows/2));//缩小多少倍
高斯模糊GaussianBlur灰度转换cvtColor计算梯度Sobel/Scharr非最大信号抑制高低阈值输出二值图像APIcv::Canny(InputArray src,//8-bit的输入图像OutputArray edges,//输出边缘图像,一般都是二值图像,背景是黑色double threshold1,//低阈值,常取高阈值的1/2或者1/3double threshold2,//高阈值int aptertureSize.//Soble算子的size,通常3*3,
霍夫变换-直线Hough Line Transform用来做直线检测前提条件:边缘检测已经完成平面空间到极坐标空间转换相关API:cv::HoughLinesP(InputArray src.//输入图像,必须8-bit的灰度图像OutputArray lines,//输出的极坐标来表示直线double rho,//生成极坐标时候的像素扫描步长double theta,//生成极坐标时候的角度步长,一般取值PI/180int threshold,//阈值,只有获得足够交点的极坐标点才被看
OpenCV3霍夫圆检测原理图(来自于51CTO教学视频)相关API
功能在父图像中寻找幅图像中的子图像相关APICV::matchTemplate(InputMat,//原图像InputMat,//模板图像OutputArray result,//输出结果,必须是单通道32位浮点数,假设原图像widthheight,模板图像WIDTHHEIGHT,则结果必须为width-WIDTH+1,height-HEIGHT+1的大小input method,//使用的匹配方法InputArray mask=noArray()//(optional))...
轮廓发现轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法。所以边缘提取的阈值选定会影响最终轮廓发现结果相关APIfindContours发现轮廓drawContours绘制轮廓函数使用以及参数详情在二值图像上发现轮廓使用APIcv::findContours(InputOutputArray,//输入图像,非0的像素被看成1,0的像素值保持不变,8-bitOutputArray,//全部发现的轮廓对象OutputArray,该图的拓扑结构,可选,该轮廓发现算法正是基于图像拓扑结构实
凸包凸包概念:在一个多边形边缘或者内部任意两个点的连线都包含在多边形边界或者内部定义:包含点集合s中所有点的最小凸多边形称为凸包相关API:convexHull(InputArray point,//输入候选点,来自findcontoursOutputArray hull,//凸包bool clockwise,//default true顺时针方向bool returnPoint//true表示返回点的个数,如果第二个参数是vector则自动忽略)相关步骤首先把图像转为灰度然后再
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号