需要帮助迭代一个数组,检索两种可能性,没有重复,为扑克AI

时间:2010-05-11 08:31:06

标签: algorithm arrays iterator poker

我真的不能想出一个很好的方式来说出这个问题,也不是一个好的标题,也许答案是如此荒谬,以至于我错过了它。我正在制作一个扑克AI,我想计算一些比我更好的牌数。我理解如何做到这一点,但我无法弄清楚是迭代一组牌的最好方法。

所以我在翻牌圈,我知道我的两张牌是什么,牌上有3张牌。所以,有47张未知的牌,我想迭代这47张牌的所有可能组合,假设两张牌都被淘汰了,所以你不能拥有两张相同等级和牌的牌,如果你之前已经计算过设置你不想再做一次,因为我会浪费时间,这将被多次调用。如果你不明白我想问我请告诉我,我会澄清更多。所以,我可以设置这样的东西,如果那个元素等于一个,这意味着它不在我手中而不在板上,每个套装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相同。它也会改变我的计算方式。我该如何避免这种情况?此外,这种技术有名称吗?谢谢。

1 个答案:

答案 0 :(得分: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; ...)
在内部的两个循环中应该做到这一点。