需要帮助来理解这个java程序

时间:2014-07-23 16:56:53

标签: java algorithm

我正在尝试理解这个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

有人可以帮我理解这个吗?感谢您的帮助。感谢。

1 个答案:

答案 0 :(得分:0)

drowdcol是指示。有9个可能的方向,循环遍历所有方向。

targetRowtargetCol的计算方法是:从colrow开始,然后按offset单位向一个方向移动。

例如:

如果drow为1且dcol为0.这意味着向下移动。

row + 1 * offset会在当前行之下找到行offset单位。

col + 0 * offset会保持col不变。