随笔分类 - 算法
摘要:本文转载自董的博客:http://dongxicheng.org/structure/permutation-combination/1. 前言本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。2. 排列算法常见的排列算法有:(A)字典序法(B)递增进位制数法(C)递减进位制数法(D)邻位对换法(E)递归法介绍常用的两种:(1) 字典序法对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列。[例]字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321。生成给定全排列的下一个排列 所
阅读全文
摘要:反向输出字符串的方法很多,实现也比较简单。下面是一种简单的用递归实现的反向输出字符串的实现。void Print(){char temp;if((temp=getchar())!='#')Print();//递归if(temp!='#')cout<<temp;}int main(){cout<<"请输入字符串以#结束:"<<endl;Print();cout<<endl;return 0;}
阅读全文
摘要:1、概述在解决一些复杂问题,特别是解决一些规模较大的问题时,常常将问题进行分解。具体来说,就是将一个规模较大的问题分割成规模较小的同类问题,然后将这些小的问题逐个加以解决,最终也就将整个大的问题解决了。这种分而治之的思想称为分治的思想。所谓递归算法,就是一种直接或间接地调用原算法本身的一种算法。递归与分治的算法思想往往相伴而生。2、问题实例例:求正整数不同的划分个数。1)问题解释:将一个正整数n表示成一系列正整数之和: n=n1+n2+......+nk称为正整数n的一个划分。求正整数n的不同划分个数。2)问题分析根据正整数划分的定义,可以总结出一下规律:设标记P(n,m)表示正整数n...
阅读全文
摘要:1、概述穷举法,又称强力法,它是一种最为直接,实现最为简单,同时又最为耗时的一种解决实际问题的算法思想。其基本思想是:在可能得解空间中穷举出每一种可能得解,并对每一个可能进行判断,从中得到问题的答案。使用注意:一是解空间的划分必须保证覆盖问题的全部解。二是解空间集合及问题的解集一定是离散的集合。评价:穷举法用时间上的牺牲换来了解的全面性保证,适用于一些规模不是很大的问题的解决。2、应用实例例:问题:寻找1—100之间的素数解决这个问题最简便的方法就是使用穷举法。判断一个整数是否为素数的函数isPrime;View Code 1 int isPrime(int n) 2 { 3 ...
阅读全文
摘要:题目描述:已知一个斜三角:22 32 14 77 45 12 34 37 23 44 23 15 34 54 88 从最左上角元素开始往右或往右下走,请问顺着哪条路所经过的值的总和最大,如可以有路线:22,32,34,23,54 ; 22,12,44,34,88等等请求出满足值总和最大的那条线路。View Code 1 void Func(int a[],int n) 2 { 3 int *b = new int[n]; //记录从某个节点开始最大路径上的下一个节点 4 int *c = new int[n]; //记录从某个节点开始最大路径的长度 5 f...
阅读全文
摘要:1、单链表逆置View Code 1 //1.单链表逆置 2 template<class Type> void LinkList<Type>::Reverse() 3 { 4 if(Head->Next==NULL) 5 { 6 cout<<"链表为空!"<<endl; 7 return; 8 } 9 Node *cur=Head->Next;10 Node *temp=cur->Next;11 if(NULL==cur || NULL==temp)12 {13 return;14 ...
阅读全文
摘要:LinkList类View Code 1 //LinkList类 2 template<class Type>class LinkList 3 { 4 private: 5 struct Node 6 { 7 Node *Next; 8 Type data; 9 }*Head,*Tail;10 unsigned int size;11 public:12 LinkList()13 { 14 Head=new Node;15 Head->Next=NULL; 16 ...
阅读全文
摘要:/*输入一个整数,如:整数7它的和为 N1+N2+...+Nk=7,且 N1>=N2>=..>=Nk(k>=1),将其拆分,并打印出各种拆分.对于7有: 6+1=7..5+2=7....1+1+1+1+1+1+1=7共有14种拆分方法。分解过程:输入3: (对5分解) 5=4+15=3+2(用递归对4分解) 4=3+14=2+2(用递归对3分解) 3=2+1(用递归对2分解) 2=1+1*/View Code 1 #include<iostream> 2 #include<list> 3 4 usingnamespace std; 5 6 int
阅读全文
摘要:View Code 1 #include<iostream> 2 #include<iomanip> 3 //#include"CheckMemoryLeak.h" 4 5 using namespace std; 6 7 void spiral(int n) 8 { 9 int temp=0; //记录层数10 int num=1; //填写数组值11 int i=0,j=0; //控制循环12 int x=0,y=-1; //控方向13 int **N=new int*[n]; //数组14 ...
阅读全文

浙公网安备 33010602011771号