检查板配置是否有效(类似于Sudoku)

时间:2015-04-07 19:18:02

标签: java arrays multidimensional-array duplicates iteration

我有一个谜题涉及一个看起来像这样的板子:

外面的数字表示有多少可见的建筑物#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;

我不知道如何检查我的电路板配置是否有效。 我现在已经挣扎了好几个小时了,任何帮助都会非常感激。

0 个答案:

没有答案