0

我真的想不出一个好的方法来表达这个问题,也想不出一个好的标题,也许答案太简单了以至于我错过了它。我正在研究扑克 AI,我想计算比我更好的手牌数量。我明白怎么做,但我想不出是迭代一组卡片的最佳方法。

所以我在翻牌圈,我知道我的两张牌是什么,而且公共牌上有 3 张牌。所以,有 47 张未知的牌,我想遍历这 47 张牌的所有可能组合,假设有两张牌被淘汰,所以你不能有两张相同等级和花色的牌,如果你之前计算过设置你不想再做一次,因为我会浪费时间,这会被调用很多次。如果您不明白我的要求,请告诉我,我会澄清更多。所以,我可以这样设置,如果该元素等于 1,则表示它不在我手中,不在棋盘上,每种花色为 4,每个等级为 13。 setOfCards[4][13] .

如果我像这样做一组简单的 for 循环:(伪代码)

//remove cards I know are in play from setOfCards by setting values to zero
for(int i = 0; i < 4; i++)
    for(int j = 0; j < 13; j++)
        for(int k = 0; k < 4; k++)
            for(int l = 0; l < 4; l++)
                //skip if values equal zero
                card1 = setOfCards[i][j]
                card2 = setOfCards[k][l]
                //now compare card1, card2 and set of board cards

所以,这实际上会重复很多值,例如:card1 = AceOfHearts, card2 = KingOfHearts 与 card1 = KingOfHearts, card2 = AceOfHearts 相同。它也会改变我的计算。我应该如何避免这种情况?另外,这种技术有名字吗?谢谢你。

4

1 回答 1

3

只拥有52 张卡片的单个数组会更容易,然后你可以说

for (int i=0; i<52; i++)
    for (int j=i+1; j<52; j++)

现在j总是高于i,所以你不会得到重复。你可以对二维数组做类似的事情,但它有点棘手:

for (int k=i; ...) 
    for (int l=j+1; ...)

在内部的两个循环中应该这样做。

于 2010-05-11T08:40:14.303 回答