我正在尝试理解这个wordsearch程序 http://kosbie.net/cmu/spring-07/15-111/handouts/java/WordSearch.java
我看到作者使用卓尔和dcol以及偏移量来判断我们是否会离开董事会。我不理解这一部分。
public static void findWord(String word, int row, int col) {
for (int drow=-1; drow<=1; drow++)
for (int dcol=-1; dcol<=1; dcol++)
findWord(word,row,col,drow,dcol);
}
public static void findWord(String word, int row, int col, int drow, int dcol) {
int rows = getRows();
int cols = getCols();
for (int offset=0; offset<word.length(); offset++) {
int targetRow = row + offset*drow;
int targetCol = col + offset*dcol;
if ((targetRow < 0) ||
(targetRow >= rows) ||
(targetCol < 0) ||
(targetCol >= cols))
// we're off the board, no match
return;
char boardChar = board.get(targetRow).charAt(targetCol);
char wordChar = word.charAt(offset);
if (boardChar != wordChar)
// mismatch, so we're done
return;
}
System.out.printf("%s at %d,%d direction %d,%d\n",
word, row, col, drow, dcol);
}
为什么循环从-1运行到1.我不理解偏移和目标计算。我在topcoder中看到了类似的帖子,其中作者谈到了“处理网格表示”
http://apps.topcoder.com/forums/?module=Thread&threadID=698352&start=0&mc=5
有人可以帮我理解这个吗?感谢您的帮助。感谢。
答案 0 :(得分:0)
drow
和dcol
是指示。有9个可能的方向,循环遍历所有方向。
targetRow
和targetCol
的计算方法是:从col
和row
开始,然后按offset
单位向一个方向移动。
例如:
如果drow
为1且dcol
为0.这意味着向下移动。
row + 1 * offset
会在当前行之下找到行offset
单位。
col + 0 * offset
会保持col不变。