c++ - -1、+1 的所有组合的 vector 的 vector

标签 c++ vector combinatorics

对于任何给定的 n ,我需要创建一个长度为 n 的 vector vector std::vector<std::vector<int>> , 包含 -1所有可能组合和 +1 .例如,对于 n=3我需要

std::vector<std::vector<int>> v = {
  { 1,  1,  1},
  { 1,  1, -1},
  { 1, -1,  1},
  { 1, -1, -1},
  {-1,  1,  1},
  {-1,  1, -1},
  {-1, -1,  1},
  {-1, -1, -1}
};

有什么提示吗?

最佳答案

使用二进制表示并测试位值的简单解决方案。我用了std::bitset尽管您也可以使用简单的 C 风格位操作。

#include <bitset>

int main(){
    int n=3;
    int to = pow(2,n);
    std::vector<std::vector<int>> result;
    for (int i=0; i < to; i++){
        std::bitset<32> b(i);
        std::vector<int> vec1;
        for (int j=0; j < n; j++){
            int value = b.test(j) ? 1 : -1;
            vec1.push_back(value);
        }
        result.push_back(vec1);
    }

    // Printing out result
    for (auto& vec : result){
        for (auto val : vec){
            cout << val;
        }
        cout << endl;
    }
}

Test Example

关于c++ - -1、+1 的所有组合的 vector 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39078685/

相关文章:

matlab - 如何识别 MATLAB 中向量中至少 10 个相邻 '1' 的第一次出现?

C++,使用 vector<int[2]> 我可以 push_back({someNum1,someNum2}) 吗?

algorithm - 建模组合优化?问题

c++ - 不知道如何正确解析 typedef

c++ - 类型转换 C++ 的行为方式很奇怪

c++ - 游戏对象互相交谈

algorithm - 生成集合的所有分区

c++ - std::ifstream 读取大数的错误大小

c++ - 在 c++ 中的 map<string, <vector<string>> 中查找 vector 中的值

matlab - 查找总和为 1 的多个变量的所有组合