算法竞赛入门经典:第七章 暴力求解法 7.9位向量法

/*
位向量法:
构造一个位向量B[i],而不是直接构造子集A本身,其中B[i] = 1当且仅当i在子集A中。
注意:此题不是求排列,而是求子集,这里n个元素有2^n-1个子集,因为空集无法打印出来

输入:
3
输出:
0 1 2
0 1
0 2
0
1 2
1
2
*/

/*
关键:
1 if(pos == n)//凡是递归,先写递归出口,否则若写在后面,很容易漏掉,所有元素是否选择确定完毕后才是一个完整的子集,因此是if(pos == n)才输出
2 			if(iArr[i])//确保i在子集iArr中
			{
				//printf("%d ",iArr[i]);//打印当前值集合
				printf("%d ",i);
			}
			printf("\n");//别忘了打印换行
3 return ;//如果这里不返回,那么pos会一直大于n,走下去
4 	iArr[pos] = 1;//将当前元素放进去,0 1 2.解答树上是2^n-1个节点,因为不分解(不完整的解)也是解答树上的节点
	printPermutation(n,iArr,pos+1);
	iArr[pos] = 0;//将当前元素取出,0 1
	printPermutation(n,iArr,pos+1);
*/

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 1024

void printPermutation(int n,int *iArr,int pos)
{
	if(pos == n)//凡是递归,先写递归出口,否则若写在后面,很容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值