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