我正在解决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");
}
答案 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
,我认为您将1
从1
更新为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;
}
答案 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