zoukankan      html  css  js  c++  java
  • 深度优先搜索dfs

    题目大意:  你手中有编号1-9的九张扑克牌,然后将这9张扑克牌放到9个盒子里,并使得_ _ _+_ _ _=_ _ _成立;

    其实就是判断下  a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9]  这个等式是否成立;

    用于对dfs的初步学习,希望对你有用(参考书籍);

    代码如下:

    #include<iostream>
    using namespace std;
    int a[10],book[10],total=0;
    void  dfs(int step)//step表示现在站在第几个盒子面前
    {
        int i;
        if(step==10)//如果站在第10个盒子面前,则表示前9个盒子已经放好扑克牌
        {//处理边界问题 
            //判断是否满足等式
            if(a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9])
        {
            total++;
            cout<<a[1]<<a[2]<<a[3]<<"+"<<a[4]<<a[5]<<a[6]<<"="<<a[7]<<a[8]<<a[9]<<endl;
        }
            return;//返回之前的一步(最近调用的地方)
        }
        //此时站在第step个盒子面前,应该放哪张牌呢?
        //按照1,2,3,........,n的顺序一一尝试
        for(i=1;i<=9;i++){
            //先判断扑克牌是否还在手上
            if(book[i]==0)//book[i]为0表示扑克牌还在手上
            {
                //开始尝试使用扑克牌
                a[step]=i;//将扑克牌放到第step个盒子里 
                book[i]=1; //将book[i]的值设为1,表示扑克牌i已不在手上
                //第step个盒子已经放置好扑克牌,走到下一个盒子面前
                dfs(step+1);//这里通过函数的递归调用来实现(自己调用自己)
                //这里是非常重要的一步,一定要将刚才尝试的扑克牌收回,才能进行下一次尝试
                book[i]=0; 
             } 
        } 
        return;     
        }
    int main()
    {
        dfs(1);//首先站在一个盒子面前
        cout<<total/2<<endl;
        getchar();
        getchar();
        return 0;
    }
         
  • 相关阅读:
    品优购项目(web)
    Linux
    web前端面试题
    三级网络
    Vue报错:TypeError: Cannot create property ‘xxx‘ on string ‘xxxx
    vue 动态添加页面背景色
    vue 打开新页面 页面滚动到顶部
    ios 系统 h5 页面不发送请求
    小程序返回上一页
    小程序动态设置页面背景色、
  • 原文地址:https://www.cnblogs.com/hrlsm/p/12609316.html
Copyright © 2011-2022 走看看