排列问题【DFS+enum】

题目:抽屉里里有红、黄、蓝、白、黑 5 种颜色的若干个球。每次从抽屉中取出 3 个球,问得到 3 种不同色的球的可能取法,编程输出每种排列的情况。  【要求用枚举类型】(答案提示:60 种) 

思路:DFS深搜,输出答案

代码

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;

class BALL{

public:
    const int tar = 3;
    enum ball { red, yellow, blue, white, black };
    bool mark[5];
    vector<ball>vt;
    int num = 0;

public:

    void out_enum(ball now)
    {
        switch(now)
        {
            case red: cout << "red"; break;
            case yellow: cout << "yellow"; break;
            case blue: cout << "blue"; break;
            case white: cout << "white"; break;
            case black: cout << "black"; break;
        }
    }

    void print()
    {
        for (int i = red; i <= black; ++i)
        {
            if (!mark[i])
            {
                cout << "Combination " << ++ num << ':';
                for (auto it : vt)
                    out_enum(it), putchar(' ');
                out_enum((ball)i), putchar('\n');
            }
        }
    }

    void dfs(int cnt) //五进制
    {
        if (cnt == tar - 1)
        {
            print();
            return;
        }
        for (int i = red; i <= black; ++i)
        {
            if (!mark[i])
            {
                mark[i] = true;
                vt.push_back((ball)i);
                dfs(cnt + 1);
                mark[i] = false;
                vt.pop_back();
            }
        }
    }

}MyAnser;

int main()
{
    MyAnser.dfs(0);
    return 0;
}
发布了273 篇原创文章 · 获赞 76 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44049850/article/details/104631556