力扣OJ|力扣OJ 剑指 Offer 12. 矩阵中的路径

题目:
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.
【力扣OJ|力扣OJ 剑指 Offer 12. 矩阵中的路径】代码:

int flatRow[4] = { 0, -1, 0, 1 }; int flatCol[4] = { 1, 0, -1, 0 }; bool existFromPointS(char** board, int boardSize, int* boardColSize, char * word,int rowS,int colS){ if (word[0] == '\0'){ return true; //word已经匹配完所有字符 } if (rowS < 0 || rowS >= boardSize || colS < 0 || colS >= *boardColSize){ return false; //越界 } if (board[rowS][colS] != word[0]){ return false; //匹配当前字符 } board[rowS][colS] = '\0'; //赋值为word中肯定没有的字符,保证不被重用 int i; for (i = 0; i < 4; i++){ if (existFromPointS(board, boardSize, boardColSize, word + 1, rowS + flatRow[i], colS + flatCol[i])){ return true; } } board[rowS][colS] = word[0]; //复原,回溯 return false; }bool exist(char** board, int boardSize, int* boardColSize, char * word){ int row, col; for (row = 0; row < boardSize; row++){ for (col = 0; col < *boardColSize; col++){ if (existFromPointS(board, boardSize, boardColSize, word, row, col)){ return true; } } } return false; }

PS:
不得不说参数的意思只能靠猜,boardSize是board的行数,*boardColSize是board的列数

    推荐阅读