题目:抽屉里里有红、黄、蓝、白、黑 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;
}