算法
danyeee
这个作者很懒,什么都没留下…
展开
-
约瑟夫问题
#include using namespace std; #define N 41 #define M 3 int main(void) { int man[N] = {0}; int count = 1; int i = 0,pos = -1; int alive = 0; while(count <= N){ do{ pos = (pos + 1) % N;原创 2014-09-19 16:29:13 · 445 阅读 · 0 评论 -
汉诺塔(递归)
#include using namespace std; void hanoi(int n, char A, char B, char C) { if(n == 1) { cout } else { hanoi(n-1, A, C, B); cout hanoi(n-1, B, A, C); } } int main() {原创 2014-09-19 11:01:00 · 575 阅读 · 0 评论 -
最大子数组问题
题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间负责度为O(n)。 首先想到的是求出这个整型数组所有子数组的和,长度为n的数组一共有 n(n+1)/2个子数组,要求出这些连续子数组的和最快也需要O(n^2)的时间复杂度。 可见我们只能对整个数组进行O(n)的遍历。假如输入数组为{13,-3,-25,20,-3,-16,-原创 2015-09-29 10:22:45 · 371 阅读 · 0 评论 -
三色旗
假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上进行这个动作,而且一次只能调换两个旗子。 解法:分别为三种颜色设置三个指针,起初B,W指向首部,R指向尾部,然后开始判断W所指向的。 1.如果是白色则不移动; 2.若是蓝色则BW互换; 3.若是红色则WR互换。 #includ原创 2015-10-02 21:02:43 · 430 阅读 · 0 评论 -
八皇后
N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击) 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。首先就是在棋盘上如何判断两个皇后是否能够相互攻击,在最初接触这个问题时,首先想到的方法就是把棋盘存储为一个二维数组,然后在需原创 2015-10-04 21:20:05 · 378 阅读 · 0 评论 -
生命游戏
在一个细胞群中,包含8个方向的邻居,对于一个细胞有如下的规则: 1.如果一个细胞的邻居少于1,则下一时刻他将死亡 2.如果一个细胞的邻居多余4个,则下一时刻他将死亡 3.如果一个细胞的邻居为2或者3,下一时刻他将存活 4.若一个位置没有细胞,而他又3个邻居,则下一时刻将会产生一个新细胞 #include #include #include #define MAXROW 10 #d原创 2015-10-05 12:08:16 · 497 阅读 · 0 评论 -
走迷宫
递归法求解走出迷宫的所有路径。 #include #include void visit(int, int); int maze[9][9] = { {2, 2, 2, 2, 2, 2, 2, 2, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 2, 0, 2, 2, 0, 2}, {2, 0, 2, 0, 0, 2原创 2015-10-03 19:13:44 · 381 阅读 · 0 评论 -
寻找共同的父节点
git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base' 参考了http://blog.csdn.net/shenxuan520/article/details/73832618 解题思路 从矩阵构造出父节点记录。记录从根节点到带求节点A和B的路径。比较路径,找到最近的公共节点。 #include #include #include #incl原创 2017-06-28 20:50:00 · 575 阅读 · 0 评论