DFS vs BFS

DFS:

#include <iostream>

#include <algorithm>

using namespace std;

int box[10];

int book[10];

int n,k;

void dfs(int box_id){

    if(box_id == k+1){

        printf("%d %d\n",box[1],box[2]);

        return;

    }

    for(int card_id=1;card_id<=n;card_id++){

        if(book[card_id]==0){

            box[box_id] = card_id;

            book[card_id] = 1;

            dfs(box_id+1);

            book[card_id] = 0;

        }

    }

}

int main(){

    scanf("%d %d",&n,&k);

    dfs(1);

    return 0;

}

BFS:

#include <iostream>

#include <queue>

#include <vector>

using namespace std;

int n, k;

struct State {

    vector<int> box; 

    vector<int> book; 

    int box_id;  

};

void bfs() {

    queue<State> q;

    State initial;

    initial.box = vector<int>(k + 1, 0); 

    initial.book = vector<int>(n + 1, 0);

    initial.box_id = 1; 

    q.push(initial);

    while (!q.empty()) {

        State current = q.front();

        q.pop();

        if (current.box_id == k + 1) {

            printf("%d %d\n", current.box[1], current.box[2]);

            continue;

        }

        for (int card_id = 1; card_id <= n; card_id++) {

            if (current.book[card_id] == 0) {

                State next = current;

                next.box[current.box_id] = card_id;

                next.book[card_id] = 1;

                next.box_id = current.box_id + 1;

                q.push(next);

            }

        }

    }

}

int main() {

    scanf("%d %d", &n, &k);

    bfs();

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值