我试着写一个算法来检查一个非图是否已经被解决了。我已经创建了多个类来拥有helper方法。到目前为止,我的设计是为 Clues
其中构造函数如下所示:
public Clues(int[][] rowClues, int[][] colClues) { // constructor stuff }
我把线索储存在二维阵列中。例如,这个拼图的线索存储方式如下:
int[][] rowClues =
new int[][] {
new int[] {0, 2},
new int[] {1, 2},
new int[] {0, 3},
new int[] {0, 3},
new int[] {1, 1},
};
int[][] colClues =
new int[][] {
new int[] {1, 1},
new int[] {0, 1},
new int[] {0, 3},
new int[] {0, 3},
new int[] {3, 1},
};
我创建了另一个类叫做 Puzzle
那是由一块棋盘(游戏用)和线索组成的。我正在尝试编写一个名为 isSolved
检查这个难题是否已经解决了,但我正在努力想出一个算法。我现在有:
public boolean isSolved() {
boolean flag = false;
for (int i=0; i<clue.getColCluesLength(); i++) {
flag = checkColumn(getBoard().getBoardColumn(i), getClues().getColClues(i));
if (flag == false) {
return false;
}
}
for (int i=0; i<clue.getRowCluesLength(); i++) {
flag = checkRow(getBoard().getBoardRow(i), getClues().getRowClues(i));
if (flag == false) {
return false;
}
}
return flag;
}
public boolean isRowSolved() {
for (int i=0; i< clue.getRowCluesLength(); i++) {
for (int j=0; j< clue.getRowClues(i).length; j++) {
}
}
return false;
}
我的电路板(2d数组)存储int,某些值表示消去、空格和着色。
我想我可以比较现有的阵列在董事会与线索阵列,但我不知道如何确切地做到这一点。
此部件的一些辅助方法包括: int[] getRowClues(int index)
, int getColRowCluesLength()
, int getWidth()
(每行拼图中水平排列的单元格数), getBoard().isShaded()
, getBoard().isEliminated()
, getBoard().isSpace()
1条答案
按热度按时间ssm49v7z1#
如果每一列和每一行都满足所有的线索,那么解决方案就是正确的。显然,正确的解决方案不能包含空白单元格,也就是说,单元格必须是阴影或消除。因此,要验证一个解决方案,必须遍历每一列和每一行,并检查线索是否满足要求。
一个小提示:
isSolved()
方法可简化为:现在要检查行或列,可以使用多种方法。这里有一个简单的方法,它基于一列构造一个新的“线索”,然后将这个新的线索与实际的线索进行比较。
上面的方法返回
true
如果给定的列满足给定的线索,false
否则。如果列包含空白单元格,也会返回false。注:我不知道一个非图形是否可以包含不包含任何阴影单元格的列(即所有单元格都被删除)。如果发生了这种情况,那么我认为这样一个专栏的线索是
new int[]{0}
,在这种情况下,您必须验证newClue
在上面的示例中,代码是一个空列表。