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