需要帮助减少三重循环以提高效率

时间:2013-05-09 03:31:40

标签: java for-loop performance

for (int i = 0; i < 3; ++i) {
    for (int k = 0; k < 7; ++k) {
        for (int h = i; h < 4 + i; ++h) {
            result = state.getAt(k, h);
            if (result == 1) {
                ++firstpl;
            }
            if (result == 2) {
                ++secondpl;
            }
            if (firstpl > 0 && secondpl > 0) {
                break;
            }
            //y = k;
        }
        if (firstpl == 0 && secondpl == 0) {
            break;
        } else if (firstpl > secondpl) {
            score += firstpl * firstpl;
            //if(state.getHeightAt(y)-3 < 3) score += 3+firstpl*2;
        } else {
            score -= secondpl * secondpl;
            //if(state.getHeightAt(y)-3 < 3) score -= 3+secondpl*2;
        }

        firstpl = 0;
        secondpl = 0;
    }
}

基本上我有一个7乘6格。我将通过7列并垂直查看每4个连续的块。由于有6个街区向上。每列有3个连续的块。 State.getAt(k,h)接受x和y并返回一个值。

1 个答案:

答案 0 :(得分:0)

我不认为你可以改进这一点,除非你能为这个&#34;状态&#34;找出替代表示。这允许以递增方式执行此计算。

由于你未能正确解释状态或计算的实际含义,除了你之外,任何人都很难弄清楚替代方法是否可行。 (而且我不会尝试对代码中的含义进行逆向工程。)


行。对于Connect4,赢/输是在7x6网格中水平,垂直或对角线上的4个检查线。因此,您可以做的是将得分状态表示为计数器数组,对应于可以在其中制作获胜线的每个列,行和对角线。 (7 + 5 + 4 + 4 =其中20个=> 20个计数器)然后构造从(x,y)位置到通过它的行的索引的静态映射。在点(x,y)处添加检查器时,您会查找计数器并递增它们。删除检查器时...减量。

我不确定这与你现有的评分功能有什么关系......但是我不知道这个功能与赢得比赛的策略有什么关系。无论哪种方式,您都可以潜在使用上述方法逐步计算分数。