Rps 2017-10-18 02:29 采纳率: 50%
浏览 2843

C++ 求数组元素的所有子集问题

以下是我写的程序,改了好久到底不知道是哪里出错了。
我怀疑是elements_count和curr_index这两个变量没有控制好。

 /*Subset Generation.*/
/*其实就是一个完全二叉树忽略根节点的的深度优先遍历。*/
/**
    elements_count : 数组的元素个数。
    subsets : 输出参数。输出所有子集的数组。每个元素的形式为010 001 100等。
    subsets_size : subsets 的长度(我感觉用不着把这参数传进来)。
    curr_index : 用于递归。代表生成的第几个子集。是数组subsets的下标。
*/
void subset(int elements_count, int*& subsets, uint16_t subsets_size, uint16_t curr_index = 0)
{
    /*向每一个子集后添加0 / 1*/
    for (int i = 0 ; i < 2 ; i++)
    {
        subsets[curr_index] |= i;
        /*是否将subsets[curr_index]的所有0、1添加完。*/
        if (elements_count > 1)
        {
            /*左移1位准备下次处理。*/
            subsets[curr_index] <<= 1;
            /*递归。*/
            subset(elements_count - 1, subsets, subsets_size, curr_index);
        }
        /*如果完成,则curr_index++,处理下一个元素。*/
        else
        {
            ++curr_index;
            subsets[curr_index] = 0;
        }

        /*如果curr_index已经达到了subsets_size,则表示所有子集已经生成。*/
        if (curr_index >= subsets_size)
        {
            return;
        }
    }

}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
    • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
    • ¥15 知识蒸馏实战博客问题
    • ¥15 用PLC设计纸袋糊底机送料系统
    • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
    • ¥15 用C语言输入方程怎么
    • ¥15 网站显示不安全连接问题
    • ¥15 51单片机显示器问题
    • ¥20 关于#qt#的问题:Qt代码的移植问题
    • ¥50 求图像处理的matlab方案