SHAOXIAOJ正在加载中...

2628: 回溯法-子集问题

金币值:3 定数:8 时间限制:1.000 s 内存限制:128 M
正确:3 提交:3 正确率:100.00% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 算法设计

题目描述

输入一个整数n表示有n(1<=n<=20)种不同的物品,要求输出这些物品的所有可能子集(如果子集中有第i个物品,则在对应的位置上输出1,否则在对应的位置上输出0;另外子集对应的二进制数要求从小到大输出,以保证答案唯一)

测试代码   复制

#include <stdio.h>

int n;//存储物品个数
int x[21]; //当前解,0号单元不存储有效数据

void output() {
	int i;
	for(i=1; i<=n; i++) {
		printf("%d ",x[i]);
	}
	printf("\n");
}

void backtrack(int i) { // 搜索第i层结点

	if(i>n) { //到达叶结点考虑结束本次递归
		output(); 
	} else {
		
	}

}

int main(void) {
	scanf("%d",&n);
	backtrack(1);
	return 0;
}

输入格式

第1行输入一个整数

输出格式

后面各行依次从小到大输出子集对应的二进制数

输入样例    复制

3

输出样例    复制

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1