zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    socket错误码获取
    代码整洁之道读书笔记函数
    算法学习之堆排序
    包含与继承区别
    提高 LayerBacked Memory Use
    RenderBuffer
    算法学习之快速排序
    NSTimer
    DNS and BIND ... (转载) zhumao
    Samba学习笔记(转载) zhumao
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/9359613.html
Copyright © 2011-2022 走看看