区域增长算法的设计与实现(递归思想和堆栈数据结构)

程序员:左正康           发表时间:2013年12月16日 0:56
   代号:与老鼠共处一室的日子

算法设计思想:算法中主要有2个函数,分别是CreateSeed函数和Decide函数,CreateSeed函数:创建种子点;Decide函数:决定连通点是否进入生长区域,进入生长区域的连通点作为下一个种子点递归调用CreateSeed函数,直到生长区域不再长大,结束递归。




程序测试展示:

时间: 2024-10-08 10:27:04

区域增长算法的设计与实现(递归思想和堆栈数据结构)的相关文章

算法设计方法:递归的内涵与经典应用

摘要: 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归.毋庸置疑地,递归确实是一个奇妙的思维方式.对一些简单的递归问题,我们总是惊叹于递归描述问题的能力和编写代码的简洁,但要想真正领悟递归的精髓.灵活地运用递归思想来解决问题却并不是一件容易的事情.本文剖析了递归的思想内涵,分析了递归与循环的联系与区别,给出了递归的应用场景和一些典型应用,并利用递归和非递归的方式解决了包括阶乘.斐波那契

算法之递归思想

树的遍历的实现就是典型的递归思想. /* * description:树的遍历示例,递归 * 访问顺序: * 前序: 当前节点 - 左子树 - 右子树 * 中序: 左子树 - 当前节点 - 右子树 * 后序: 左子树 - 右子树 - 当前节点 * * writeby: nick * date: 2012-10-22 23:56 */ #include <iostream> using namespace std; struct node { int item; node *l, *r; nod

Python算法——递归思想

编程语言在构建程序时的基本操作有:内置数据类型操作.选择.循环.函数调用等,递归实际属于函数调用的一种特殊情况(函数调用自身),其数学基础是数学归纳法.递归在计算机程序设计中非常重要,是许多高级算法实现的基础 编写递归程序的几个要点: 1.终止条件:最简单情况(避免无限循环) 2.递归公式:相邻两次调用间的关系(递归算法核心) 3.忽略调用具体细节:假设所有调用都会达到终止条件(从思想上接受递归算法的关键) 4.效率:递归算法有时效率较低,可考虑其他更高效的实现方式(见问题5) 下面我们通过几个

python算法之递归思想

#递归思想#基本原理:函数内部调用函数本身,注意:至少有一个终止条件#例1.斐波那契数列def fib(x): if x==1 or x==2: return 1 else: return fib(x-1) + fib(x-2)def fibList(x): fibList = [] for i in range(x): fibList.append(fib(i+1)) return fibListprint(fibList(9)) #例2.n的阶乘(n*(n-1)*(n-2)*...2*1)d

关于回调和递归思想的理解

1) 面向过程的递归思想在面向对象的编程世界中的递归调用就是回调思想.它们两个的区别就是多了一个封装了方法和属性的对象.回调函数实参传递的是一个函数的指针,其实递归调用也是用函数的相同地址进行递归循环处理数据的.递归函数的原理就是函数的参数值不断地变化,从而不断的重新回到函数的起始地址处根据传递的参数值不断地处理数据.回调函数的原理就是把函数当做一个可以传递的实参赋值给自定义的回调函数的形参,实际传递的是定义函数的地址. a) 理解回调函数最好把函数和类型对象相当,因为他们都是数据变量的集合,都

第二篇 递归思想

今天说说递归思想,在我们编码时,有的时候递归能够让我们的算法更加通俗易懂,并且代码量也是大大的减少.比如我先前的系列中说到了 关于树的“先序,中序和后序”遍历,那么看看用递归来描叙这个问题是多少的简洁,多么的轻松. 1 #region 二叉树的先序遍历 2 /// <summary> 3 /// 二叉树的先序遍历 4 /// </summary> 5 /// <typeparam name="T"></typeparam> 6 /// &

由递归思想处理问题的基本原则

我的主力博客:半亩方塘 在我的博文关于递归的一些简单想法,我用自己的理解谈了一些关于递归的看法,下面用 <数据结构与算法分析--C语言描述> 一书中第 9 页的四条基本原则将我的思想加以规范化,并在后续的不断加强学习中不断完善本文的内容. 在编写递归程序的时候,要牢记递归的四条基本原则: 基准情形:必须总有某些基准情形,它无需递归就能解出 -- 构成递归终止条件 不断推进:对于那些需要递归求解的情形,每一次递归调用都必须要使求解状况朝接近基准情形的方向推进 -- 由初始情形通过递归调用不断向递

分治策略结合递归思想求最大子序列和

我的主力博客:半亩方塘 对于 <数据结构与算法分析--C语言描述> 一书第 20 页所描述的算法 3,相信会有很多人表示不怎么理解,下面我由具体问题的求解过程出发,谈谈我自己的理解: 首先,什么是分治法呢?所谓 分治法,就是 将一个问题的求解过程分解为两个大小相等的子问题进行求解,如果分解后的子问题本身也可以分解的话,则将这个分解的过程进行下去,直至最后得到的子问题不能再分解为止,最后将子问题的解逐步合并并可能做一些少量的附加工作,得到最后整个问题的解.在求解原来整个问题的算法思想,与求解每一

递归思想即背包问题

01背包问题: 1.递归思想 0- 1 背包问题如果采用递归算法来描述则非常清楚明白, 它的算法根本思想是假设用布尔函数 knap( s, n) 表示n 件物品放入可容质量为s 的背包中是否有解( 当knap 函数的值为真时 说明问题有解,其值为假时无解) . 我们可以通过输入s 和n 的值, 根据它们的值可分为以下几种情况讨论: ( 1) 当s= 0时可知问题有解, 即函数knap( s, n) 的值为true; ( 2) 当s< 0 时这时不可能, 所以函数值为false; ( 3) 当输入