8 Queens - 计算每行的皇后数

时间:2015-07-18 19:46:44

标签: java

我正在解决8皇后问题,我正在努力计算每一行上的皇后数量。皇后区由1代表。我的程序最初将所有8个女王随机放在棋盘上开始,但是我的结果出现了问题(我称之为启发式的h。例如,如果我连续只有一个1,那么h应该= 0(因为这个)意味着没有冲突),但如果一行中有两个1,那么我的h应该为该行的1。在我遍历所有行之后它将返回总h值,但我得到的数字不是有意义。当我运行它时,我得到h = 0,即使我可能有2或3个皇后居住在同一行。我做错了什么? (如果你需要我提出我的所有代码,我非常乐意)

public void computeHeuristic(){  //calculate heuristic value for whole board rows and diags

    int h = 0;
    int row = 0;
    int queen = 0;
    //int numQueens = 0;
    //Rows

    while(row <= 7 ){//increment row upto 7
        for(int j = 0; j < 8; j++){             
            h += board[row][j]; 

            row++;      
        }
    }
    System.out.print("h: " + h + "\n");
}

2 个答案:

答案 0 :(得分:0)

  

当我运行它时,我得到h = 0

很可能第一行没有使用任何1进行初始化,并且您只检查第一行,因为在for循环内增加row时,while循环体只会迭代一次,

for(int j = 0; j < 8; j++){             
    h += board[row][j]; 

    row++; 
    ^^^^^     
}

因此,在for循环的迭代完成后,row变为8,因此while循环不再循环。

如果任何行包含多个h(例如两个或更多0,我认为您将11更新为1。 1}}连续)。

所以试试这个:

int singleRowCount = -1;
for(int row = 0; row < 8; row++){
    for(int col = 0; col < 8; col++){             
        singleRowCount += board[row][col]; 
    }
    if(singleRowCount > 0)
        h += singleRowCount;
    singleRowCount = -1;
}

Check live here.

答案 1 :(得分:0)

我的基本代码中没有找到任何逻辑:

<div data-ng-repeat="(key, value) in data">
    <input data-ng-model="key" />
    <input data-ng-model="value" />
</div>

这里即使你把while(row <= 7 ){//increment row upto 7 for(int j = 0; j < 8; j++){ h += board[row][j]; row++; } } 放在外部循环中,你也要总结8X8数组所有单元格的内容。由于有8个1和56个0,row++总是会产生8个1s的位置

要检查连续多少行中有多个1,请尝试以下操作:

h