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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM