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 聚类分析或者python进行数据分析
    • ¥15 逻辑谓词和消解原理的运用
    • ¥15 三菱伺服电机按启动按钮有使能但不动作
    • ¥15 js,页面2返回页面1时定位进入的设备
    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
    • ¥15 错误 LNK2001 无法解析的外部符号