Q04切分木棒

来源:互联网 发布:阿里云ecs上传文件 编辑:程序博客网 时间:2024/05/22 16:41

本文是程序员算法趣题一书Q04 C语言实现,由于该书中所给的代码是Javascripts与Ruby,故在今后的阅读中会记录部分习题的C语言实现。
Q04问题后面的Column中介绍了深度优先搜索和广度优先搜索。
深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。
广度优先搜索算法(英语:Breadth-First-Search,缩写为BFS),又译作宽度优先搜索,或横向优先搜索,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。广度优先搜索的实现一般采用open-closed表。

代码实现两种方式:

/*    Name: Q04切分木棒    Copyright: 52coder.net    Author: 52coder    Date: 04/09/17 23:44    Description: Q04*/#include <stdio.h>#include <stdlib.h>/*递归实现,终止条件是木棒数大于n*/int cutbar(int n,int m,int current){    if(current >= n)        return 0;    else if(current < m)/*人多,可以当前current,下次翻倍*/        return 1 + cutbar(n,m,current * 2);    else/*人比木棒数目少,下次多m个木棒*/        return 1 + cutbar(n,m,current + m);}/*逆向思维方法m个人黏1cm的木棒组成n cm的木棒*/int cut(n,m){    int count = 0;    int current = 1;    while(current <= n)    {        if(current < m)            current += current;        else            current += m;                count += 1;    }        return count;    }int main(){    int n = cut(20,3);    int m = cut(100,5);    printf("%d %d\n",n,m);    return(0);}
原创粉丝点击