#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void dfs(int *nums, int size, int start, int *stack,
int len, int **sets, int *count, int *sizes)
{
int i;
sets[*count] = malloc(len * sizeof(int));
memcpy(sets[*count], stack, len * sizeof(int));
sizes[*count] = len;
(*count)++;
for (i = start; i < size; i++) {
stack[len] = nums[i];
dfs(nums, size, i + 1, stack, len + 1, sets, count, sizes);
}
}
/**
** Return an array of arrays of size *returnSize.
** The sizes of the arrays are returned as *returnColumnSizes array.
** Note: Both returned array and *returnColumnSizes array must be malloced, assume caller calls free().
**/
int** subsets(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
{
int capacity = 5000;
int **sets = malloc(capacity * sizeof(int *));
int *stack = malloc(numsSize * sizeof(int));
*returnColumnSizes = malloc(capacity * sizeof(int));
*returnSize = 0;
dfs(nums, numsSize, 0, stack, 0, sets, returnSize, *returnColumnSizes);
return sets;
}
int main(int argc, char **argv)
{
int i, j;
if (argc <= 1) {
fprintf(stderr, "Usage: ./test array...\n");
exit(-1);
}
int size = argc - 1;
int *nums = malloc(size * sizeof(int));
for (i = 0; i < size; i++) {
nums[i] = atoi(argv[i + 1]);
}
int *sizes;
int count;
int **lists = subsets(nums, size, &count, &sizes);
for (i = 0; i < count; i++) {
for (j = 0; j < sizes[i]; j++) {
printf("%d ", lists[i][j]);
}
printf("\n");
}
return 0;
}

Ddddddd_158
- 粉丝: 3167
最新资源
- 网络环境下经济管理类统计学课程教学的思考.docx
- 云计算助推大数据价值的深挖.docx
- 人工智能面临的问题、挑战与伦理.docx
- 各大媒体广告价格大盘点包含传统媒体网络媒体绝对值得参考.ppt
- 基于少儿图书馆网站调查的网络信息资源评价.docx
- 园林绿化工程项目管理探究.docx
- 基于连续Hopfield网络的物流路径优化研究与仿真.docx
- MapReduce概述-云计算.docx
- 数据结构课程实施方案任务书通信.doc
- linux驱动程序设计方案实例.doc
- 办公软件高级应用.doc
- 大型企业网站方案.doc
- 大学生招聘网站系统规划研究设计.doc
- 总结gitlab问题.docx
- LED照明及能产品推广项目管理农大.doc
- autocad中设置可打印区域的修改.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


