我有一个谜题涉及一个看起来像这样的板子:
外面的数字表示有多少可见的建筑物#34;可以看到面对那个方向。因此,如果第1列的北侧有1,则该列必须是6,因为您只能看到一个建筑物。提醒:董事会尚未完全填充。
1 4 2 2 2 3
-----------
1|. . . 2 . .|4
3|3 4 . . . .|2
3|. . . 1 . .|2
2|. 1 . . . .|4
6|. . . . . 6|1
2|5 . 1 . . 4|2
-----------
2 1 3 4 3 2
我在实施isValid
方法时遇到困难,该方法将检查电路板的当前配置是否有效。
正确的配置示例如下所示:
1 2 3 3
--------
1|4 3 2 1 |4
2|1 4 3 2 |3
2|3 2 1 4 |1
2|2 1 4 3 |2
--------
3 3 1 2
我的isValid
方法:
/**
* You must do some sort of pruning (removing excessive possibilities) in your isValid method
* @return boolean
*/
@Override
public boolean isValid() {
//check for duplicates first
Set<Integer> set = new HashSet<Integer>();
for (int r = 0; r < this.dimension; r++) { //Row
for (int c = 0; c < this.dimension; c++) { //Column
set.add(this.board[r][c]);//Add all the values from a array into a set
}
if(set.size()< this.board.length) {//If the size of the set is less than the array length
return false;//The config is invalid
}
set.clear();//If not invalid, move onto the next array and clear the set.
}
//Now I need to check when the board becomes fully populated(no empty positions remaining)
//check all the looking values for any violations(NS, SN, EW, WE)
//... Not sure how to do this
return true;
}
我得出的结论是,我需要检查行/列中的重复项,以及当电路板完全填充(没有剩余空位)时,检查所有违规的查找值。
我的主席的数据结构是一个二维数组(public int[][] board;
)
我将外部数字表示为4个独立的数组:
public int[] NORTH, SOUTH, EAST, WEST;
我不知道如何检查我的电路板配置是否有效。 我现在已经挣扎了好几个小时了,任何帮助都会非常感激。