public class Solution { public bool Exist(char[,] board, string word) { RowLen = board.GetLength(0); ColLen = board.GetLength(1); for(var i =0 ;i < RowLen; i++){ for(var j = 0;j < ColLen; j++){ if(TryFind(board, word, i, j, 0)){ return true; } } } return false; } private int RowLen; private int ColLen; public bool TryFind(char[,] board, string word, int row, int col, int i) { if(row < 0 || col < 0 || row >= RowLen || col >= ColLen || word[i] != board[row,col]){ return false; } if(i == word.Length - 1){ return true; } var t = board[row,col]; board[row,col] = ‘%‘; if(TryFind(board, word, row-1 , col, i+1)|| TryFind(board, word, row+1 , col, i+1)|| TryFind(board, word, row , col-1, i+1)|| TryFind(board, word, row , col+1, i+1)){ return true; } board[row,col] = t; return false; } }
原文:http://blog.csdn.net/lan_liang/article/details/50144427