java需要帮助减少三重for循环以提高效率
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个4个连续块。状态getAt(k,h)接受x和y并返回一个值
# 1 楼答案
我不认为你能在这方面有所改进,除非你能为这个“状态”找到一个替代的表示,它允许这个计算以增量的方式执行
由于你没有正确地解释国家或计算的实际含义,除了你以外的任何人都很难弄清楚替代方法是否可行。(就我个人而言,我不会试图对代码的含义进行反向工程。)
嗯。对于Connect4,赢/输是在7x6网格中水平、垂直或对角排列的4个棋盘格。因此,您可以将分数状态表示为一个计数器数组,对应于可以生成获胜线的每一列、每一行和每一条对角线。(7+5+4+4=20个计数器=>;20个计数器)然后构造从(x,y)位置到通过该位置的行索引的静态映射。在点(x,y)添加检查器时,查找计数器并递增它们。当您删除检查器时。。。减量
我不确定这与你现有的评分功能有什么关系。。。但是我不知道这个功能与赢得比赛的策略有什么关系。无论哪种方式,您都可以使用上述方法以增量方式计算分数