dfs的一个小实现(啊哈算法的例题)

给定n个盒子,将n个小球放进这些盒子里,判断都有多少种情况

写深度优先搜索最重要的是理解当前步怎么做,下一步就当系统已经帮你实现好了(因为只要写好当前步,下一步解决方法和当前步是一样的).

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <iomanip>
#include <queue>
using namespace std;
int a[10],book[10],n;//book数组是一个标记数组,n是小球和盒子的数目 
void dfs(int step){//step表示当前所在的小盒子 
    if(step==n+1){
        for(int i=1;i<=n;i++){
            cout<<a[i]<<" ";
        }
        cout<<endl; 
        return ;
    }
    for(int i=1;i<=n;i++){
        if(book[i]==1){
            continue;
        }
        book[i]=1;
        a[step]=i;//当前盒子 
        dfs(step+1);//递归开始,在下一步返回后要将当前步的小球在放回去,继续for循环,就能得到一个不同顺序的序列。 
        book[i]=0;// dfs最重要的的就是记得取消当前状态 
    }//当i=n时,跳出for循环
    return ; 
} 
int main(){
    cin>>n;
    dfs(1);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/qingjiuling/p/9359613.html
今日推荐