N个数全排列的非递归算法】的更多相关文章

//N个数全排列的非递归算法 #include"stdio.h" void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp; } /* 根据当前的排列p,计算下一个排列. 原则是从1234–>4321,若p已经是最后一个排列,传回false,否则传回true. p是一个n维向量. */ bool nextPermutation(int *p, int n) { ; int i,j,k; //从后…
非递归算法: 根据圆盘的数量确定柱子的排放顺序: 若n为偶数,按顺时针方向依次摆放 A B C: 若n为奇数,按顺时针方向依次摆放 A C B. 然后进行如下操作: (1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B:若圆盘1在柱子B,则把它移动到C:若圆盘1在柱子C,则把它移动到A. (2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上.即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘. (3)反复进行(1)(2…
汉诺塔介绍: 汉诺塔(港台:河内塔)是根据一个传说形成的数学问题: 最早发明这个问题的人是法国数学家爱德华·卢卡斯. 传说越南河内某间寺院有三根银棒,上串 64 个金盘.寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这些盘子移动完毕,世界就会灭亡.这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle).但不知道是卢卡斯自创的这个传说,还是他受他人启发. 若传说属实,僧侣们需要 \(2^{64}-1\)步才能完成这个任务:若他们每秒可完成一个盘子的移动,就需要…
运行结果 代码如下 #include <bits/stdc++.h> using namespace std; ; const char *LINE32 = "--------------------------------"; const bool PRINT_DETAILS = false; ;// n表示皇后数量,cnt表示方案数量 ][*MAX+]; //v[0][].v[1][].v[2][]分别表示列.主对角线.副对角线是否存在皇后 // 为0时表示无皇后,非0…
1.递归 递归:程序调用自身的编程技巧称为递归(recursion). 优点是:代码简洁,易于理解. 缺点是:运行效率较低. 递归思想:把问题分解成规模更小,但和原问题有着相同解法的问题. 1)下面是关于1+2+3+....+n的递归算法: /// <summary> /// 1+2+3+....+n的递归算法 /// </summary> /// <param name="i"></param> /// <returns>&…
1.二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.求二叉树中第K层的第M个节点 (1)非递归算法 借助队列实现 首…
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wintys.blog.51cto.com/425414/94051 Java二分查找实现,欢迎大家提出交流意见. /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: * 1.要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integer.String等. * 2.非递归查找使用search()…
前序遍历 非递归 public void preordernorec(TreeNode root){ //System.out.println("先序遍历(非递归):"); //用数组模拟栈,假设有节点个数不超过32个 TreeNode[] stack = new TreeNode[32]; for(int i =0;i<32;i++){ stack[i] = null; } int index =0; TreeNode pnode = root; while(pnode!=nu…
在DFS的递归算法中,DFS框架如下: 1访问起点v0 2依次以v0的未访问的连接点为起点,DFS搜索图,直至图中所有与v0路径相通的顶点都被访问. 3若该图为非连通图,则图中一定还存在未被访问的顶点,选取该顶点为起点,重复上述DFS过程,直至图中全部顶点均被访问过为止. 而在非递归的DFS框架中,运用栈来取代递归(递归的本质就是入栈出栈),所以用自定义的栈取代递归栈,具体框架如下: 1首先初始化待使用栈,然后将第一个结点入栈 2然后只要栈不空,重复下面的操作:将栈顶元素弹出,然后看该元素是否访…
1.循环算法: void PrintN_1(int N) { int i; ; i <= N; i++) printf("%d\n", i); return; } N可以为任意数量级的整数 2.递归算法: void PrintN_2(int N) { if (N) { PrintN_2(N - ); printf("%d\n", N); } } 当N为10^4个数量级的时候程序就会非正常中断,要计算PrintN_2(N),因为这个函数里还有其他的语句,所以要先…