class Solution {
public boolean exist(char[][] board, String word) {
int row = board.length; //获取行数;
int col = board[0].length; //获取列数;
int[][] used = new int[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (board[i][j]==word.charAt(0)) {
used[i][j]=1;
if (bfs(board, row, col, i, j, 1,word,used))
return true;
used[i][j]=0;
}
}
}
return false;
}
private static boolean bfs(char[][] board,int row,int col,int i ,int j,int index,String word,int[][] used){
if (index==word.length()){
return true;
}
//向左走一步
if (0<=i && i<row && 1<=j && j<col && board[i][j-1]==word.charAt(index) && used[i][j-1]!=1){
used[i][j-1]=1;
if (bfs(board, row, col, i, j-1, index+1, word,used))
return true;
used[i][j-1]=0;
}
//向右走一步
if (0<=i && i<row && 0<=j && j<col-1 && board[i][j+1]==word.charAt(index) && used[i][j+1]!=1){
used[i][j+1]=1;
if (bfs(board, row, col, i, j + 1, index + 1,word,used))
return true;
used[i][j+1]=0;
}
//向上走一步
if (1<=i && i<row && 0<=j && j<col && board[i-1][j]==word.charAt(index) && used[i-1][j]!=1) {
used[i-1][j]=1;
if (bfs(board, row, col, i - 1, j, index + 1, word,used))
return true;
used[i-1][j]=0;
}
//向下走一步
if (0<=i && i<row-1 && 0<=j && j<col && board[i+1][j]==word.charAt(index) && used[i+1][j]!=1) {
used[i+1][j]=1;
if (bfs(board, row, col, i + 1, j, index + 1,word,used))
return true;
used[i+1][j]=0;
}
return false;
}
}
错误代码,还没找到错误原因
class Solution {
public boolean exist(char[][] board, String word) {
int rows = board.length;
int cols = board[0].length;
boolean[][] visited = new boolean[rows][cols];
for(int i=0; i<rows; i++){
for(int j=0; j<cols; j++){
visited[i][j] = true;
if(board[i][j]==word.charAt(0)){
next(board,word,1,i,j,visited);
}
visited[i][j] = false;
}
}
return false;
}
public boolean next(char[][] board, String word, int index, int i, int j, boolean[][] visited){
if(index==word.length()){
return true;
}
int rows = board.length;
int cols = board[0].length;
if(0<=j && j<cols&&i>=0&&i+1<rows&&board[i+1][j]==word.charAt(index)&&!visited[i+1][j]){
visited[i+1][j] = true;
if(next(board, word, index+1, i+1, j, visited)){
return true;
}
visited[i+1][j] = false;
}
if(0<=j && j<cols&&i-1>=0&&i<rows&&board[i-1][j]==word.charAt(index)&&!visited[i-1][j]){
visited[i-1][j] = true;
next(board, word, index+1, i-1, j, visited);
visited[i-1][j] = false;
}
if(j>=0&&j+1<cols&&0<=i && i<rows&&board[i][j+1]==word.charAt(index)&&!visited[i][j+1]){
visited[i][j+1] = true;
if(next(board, word, index+1, i, j+1, visited)){
return true;
}
visited[i][j+1] = false;
}
if(j-1>=0&&j<cols&&0<=i && i<rows&&board[i][j-1]==word.charAt(index)&&!visited[i][j-1]){
visited[i][j-1] = true;
if(next(board, word, index+1, i, j-1, visited)){
return true;
}
visited[i][j-1] = true;
}
return false;
}
}