给定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;
}

 

相关文章:

  • 2021-06-26
  • 2022-12-23
  • 2022-12-23
  • 2021-10-19
  • 2021-10-01
  • 2021-06-26
  • 2021-05-21
  • 2022-12-23
猜你喜欢
  • 2021-09-10
  • 2021-07-22
  • 2021-05-22
  • 2022-12-23
  • 2021-04-13
  • 2022-12-23
  • 2021-11-18
相关资源
相似解决方案