离散数学集合论与关系编程作业
编写程序,打印输出n元(n=1,2,3,4,5,6)集合的幂集中的所有元素。
编程语言:
C++
程序设计简要描述:
存储结构:
使用了两个数组,n[]数组代表n元集合,a[]数组代表每个数的取舍状态。
主要算法:
打印幂集的设计思路是集合当中的每个数都有取和不取两种状态,分别用0和1表示,并把它赋值给a[]数组,因此就有2^6种可能,这个赋值的操作可以使用6个for循环,但节约内存可以用更加简便的深度优先搜索来进行。
输入与输出的实现:
根据前面的算法,我们通过深度优先搜索完成了每个数的状态的确定,接着我们对n[]数组进行遍历,加上限制条件如果这个数的状态是“取”也就是值为“1”,那么我们就打印,若不是“1”则跳过,检查下一个数的状态,直到每个数都被检查过。
代码实现
#include <iostream>
using namespace std;
int n[6]={1,2,3,4,5,6};
int a[6]={0};
void dfs(int k)
{
if (k==6)
{
cout<<"{";
for (int i = 0; i < 6; i++)
{
if (a[i]==1)
{
cout<<n[i]<<",";
;
}
}
cout<<"}";
printf("\n");
return;
}
for (int i = 0; i < 2; i++)
{
a[k]=i;
dfs(k+1);
}
return;
}
int main()
{
freopen("D:\\logic2.txt","w",stdout);
dfs(0);
fclose(stdout);
return 0;
}