gpt4 book ai didi

c++ - 更智能的排列循环

转载 作者:太空狗 更新时间:2023-10-29 20:45:25 25 4
gpt4 key购买 nike

我有一个 3 x 3 的 bool 值网格,我感兴趣的是我可以拥有恰好三个“活”单元格的方法的数量(根据我的计算,有 56 种排列)。旋转对称性无关紧要,但活细胞彼此无法区分。

假设我正在索引网格中相对于质心的值:

-------------------
|-1,-1| 0,-1| 1,-1|
-------------------
|-1,0 | | 1,0 |
-------------------
|-1,1 | 0,1 | 1,1 |
-------------------

是否有一个很好的循环可以用来计算 56 种排列? (我刚刚把它全部打完,我很想知道我是否可以更聪明一点)。

我使用的是 C++,但基本算法在任何语言或伪语言中都会很棒,如果它很清楚的话。

最佳答案

您可以使用 next_permutation .

例如,假设字符串下面 x 中的每个字符代表网格中的一个单元格(质心单元格除外)从左上角开始到右下角。您可以运行此代码来查找所有可能的排列,在循环内,字符串 x 将代表一种可能的排列,其中 1 是活细胞,0 是死细胞。

int main() {
string x = "00000111";
int cnt = 0;
do {
++cnt;

// do something useful with this configuration...

} while(next_permutation(x.begin(),x.end()));
cout<<cnt<<endl;
return 0;
}

关于c++ - 更智能的排列循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791289/

25 4 0
文章推荐: c++ - 关联/随机访问容器
文章推荐: C# IEnumerable 到字符串
文章推荐: C# 泛型 : List or new class extends List