函数题:幂集(无输出顺序要求)-队列式广度优先搜索
所谓幂集(Power Set), 就是原集合中所有的子集(包括全集和空集)构成的集族。
输入一个整数n(0<=n<=10)
输出由整数1~n构成的集合{1,2,3,...,n}的幂集。
本题需要实现如下函数bfs()并在其中调用裁判测试程序中的EnQueue()函数,完成使用队列式广度优先搜索幂集问题的子集树。
### 函数接口定义:
c++
void bfs(); //广度优先搜索子集树
### 裁判测试程序样例:
c++
在这里给出函数被调用进行测试的例子。例如:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
vector<int> nSet; // 原始元素集合
int n; // 原始元素个数
struct NodeType //队列中的结点类型
{
int i; //当前结点在搜索空间中的层次
vector<int> x; //当前结点包含的解向量,若x为{1,0,0,1},表示子集中只有有第1个和第4个元素
};
void EnQueue(NodeType e,queue<NodeType> &qu) //结点e是否进队qu及相应处理
{
if (e.i==n){ //到达叶子结点,不进队,对应一种子集
cout<<"{";
int num = 0;
for(int j = 0; j < n; j++){
if(e.x[j] == 1){
if(++num == 1)
cout<<nSet[j];
else
cout<<","<<nSet[j];
}
}
cout<<"}"<<endl;
}
else qu.push(e); //非叶子结点进队
}
void bfs(); //广度优先搜索子集树
int main()
{
cin >> n;
for(int i = 1; i <= n; i++){
nSet.push_back(i);
}
bfs(); // 广度优先搜索
return 0;
}
/* 请在这里填写答案 */
### 输入格式:
整数n(0<=n<=10)
### 输出格式:
{1,2,3,...,n}的幂集,每行一个子集,子集不可重复,子集之间顺序以及子集元素之间顺序均不作要求。
子集输出格式:{x,x,x,..,x}(x表示子集中的元素)
### 输入样例:
在这里给出一组输入。例如:
in
3
### 输出样例:
在这里给出相应的输出。例如:
out
{}
{1}
{2}
{3}
{1,2}
{1,3}
{2,3}
{1,2,3}
答案:若无答案欢迎评论
输入一个整数n(0<=n<=10)
输出由整数1~n构成的集合{1,2,3,...,n}的幂集。
本题需要实现如下函数bfs()并在其中调用裁判测试程序中的EnQueue()函数,完成使用队列式广度优先搜索幂集问题的子集树。
### 函数接口定义:
c++
void bfs(); //广度优先搜索子集树
### 裁判测试程序样例:
c++
在这里给出函数被调用进行测试的例子。例如:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
vector<int> nSet; // 原始元素集合
int n; // 原始元素个数
struct NodeType //队列中的结点类型
{
int i; //当前结点在搜索空间中的层次
vector<int> x; //当前结点包含的解向量,若x为{1,0,0,1},表示子集中只有有第1个和第4个元素
};
void EnQueue(NodeType e,queue<NodeType> &qu) //结点e是否进队qu及相应处理
{
if (e.i==n){ //到达叶子结点,不进队,对应一种子集
cout<<"{";
int num = 0;
for(int j = 0; j < n; j++){
if(e.x[j] == 1){
if(++num == 1)
cout<<nSet[j];
else
cout<<","<<nSet[j];
}
}
cout<<"}"<<endl;
}
else qu.push(e); //非叶子结点进队
}
void bfs(); //广度优先搜索子集树
int main()
{
cin >> n;
for(int i = 1; i <= n; i++){
nSet.push_back(i);
}
bfs(); // 广度优先搜索
return 0;
}
/* 请在这里填写答案 */
### 输入格式:
整数n(0<=n<=10)
### 输出格式:
{1,2,3,...,n}的幂集,每行一个子集,子集不可重复,子集之间顺序以及子集元素之间顺序均不作要求。
子集输出格式:{x,x,x,..,x}(x表示子集中的元素)
### 输入样例:
在这里给出一组输入。例如:
in
3
### 输出样例:
在这里给出相应的输出。例如:
out
{}
{1}
{2}
{3}
{1,2}
{1,3}
{2,3}
{1,2,3}
答案:若无答案欢迎评论