smallfang

关于DFS迭代搜索
DFS相信一定不陌生。但是迭代搜索是什么呢?让我们拭目以待!迭代搜索会加快DFS的搜索速度。它的原理是按层搜索。依...
扫描右侧二维码阅读全文
01
2020/08

关于DFS迭代搜索

DFS相信一定不陌生。但是迭代搜索是什么呢?让我们拭目以待!

迭代搜索会加快DFS的搜索速度。它的原理是按层搜索。依次迭代。适用于答案不在非常深的子树中。

与BFS的一个主要区别:

BFS会造成很大的空间浪费,指数级的空间会使得bfs造成崩溃。

那么我们来上一道题,This.

我们可以使迭代加深来做。

Code:

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int a[101];
int n;

bool dfs(int x, int d)
{
    if (a[x - 1] == n)
        return true;
    if (x > d)
        return false;
    bool st[101] = {0};
    for (int i = x - 1; i >= 0; i -- )
    {
        for (int j  = i; j >= 0; j -- )
        {
            int s = a[i] + a[j];
            if (st[s] || s > n || s <= a[x - 1])
            {
                continue;
            }
            st[s] = true;
            a[x] = s;
            if (dfs(x + 1, d))
            {
                return true;
            }
        }
    }
    return false;
}

int main()
{
    while (cin >> n)
    {
        a[0] = 1;
        if (n == 0)
        {
            return 0;
        }
        int d = 1;
        while (dfs(1, d) == 0)
        {
            d ++;
        }
        if (n == 1)
        {
            cout << 1 << endl;
            continue;
        }
        for (int i = 0; i <= d; i ++ )
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}

The end.

Last modification:August 10th, 2020 at 08:30 pm
End.

Leave a Comment