2.1 最基础的“穷竭搜索”

来源:互联网 发布:linux修改ip的命令 编辑:程序博客网 时间:2024/06/06 04:03

递归函数


斐波那契数列中的递归,有许多项会反复出现,可以将他们存在数组里。

int memo[MAX_N]int fib(int n){    if (n <= 1)    return n;    if (memo[n] != 0)  return memo[n];    return memo[n] = fib(n-1) + fib(n-2);}

实现数据后入先出

#include<stack>#include<cstdio>using namespace std;int main(){    stack<int> s;            //声明储存int类型的栈    s.push(1);               //{} -> {1}    s.push(2);               //{1} -> {1,2}    s.push(3);               //{1,2} -> {1,2,3}    printf("%d",s.top());    // 3    s.pop()                  //从栈顶移除3    return 0;}

队列

实现数据先入先出,用于暂时按顺序存储数据。

#include<cstdio>#include<queue>using namespace std;int main(){    queue<int> que;             //声明int类型的队列    que.push(1);                //{}->{1}    que.front();                //队首元素    que.pop();                  //从队首弹出一个元素    return 0;}

深度优先搜索

它从某个状态开始,不断地转移知道无法转移为止,然后回到前一个状态,继续转移到其他状态,如此反复不断。例如数独。
Lake Counting (POJ No,2386)

宽度优先搜索

它是按照初始状态->只需一次就可以转移到的状态->需要两次。。。。
复杂度为 O(状态数x转移方式)
例如迷宫问题。

特殊状态的枚举

next_permutation 函数

剪枝

在递归搜索中,把没有必要的搜索去掉。

例题

Red and Black
Curling 2.0

0 0
原创粉丝点击