cpp
复制代码
bool backtracking(vector<vector<char>>& board, string word, int i, int j, int index,
vector<vector<int>>& visited){
int row = board.size();//行
int col = board[0].size();//列
if(i<0 || j<0 || i>row-1 || j>col-1 || word[index]!=board[i][j]|| visited[i][j] == 1){
return false;//当前坐标越界直接返回false
}
if(index == word.length()-1){
return true;
}
visited[i][j] = 1;//标记一访问当前坐标(i,j);
bool top = backtracking(board,word,i-1,j,index+1,visited);
bool left = backtracking(board,word,i,j-1,index+1,visited);
bool down = backtracking(board,word,i+1,j,index+1,visited);
bool right = backtracking(board,word,i,j+1,index+1,visited);
bool res = (top||left||down||right);
visited[i][j] = 0;
return res;
}
bool exist(vector<vector<char>>& board, string word) {
int row = board.size();//行
int col = board[0].size();//列
vector<vector<int>> visited(row,vector<int>(col,0));//初始化row*col二维矩阵初始化0
for(int i = 0; i <= row-1; i++){//每个位置都遍历
for(int j = 0; j <= col-1; j++){
if(backtracking(board,word,i,j,0,visited)){
return true;
}
}
}
return false;
}
cpp
复制代码
bool backtracking(char** board,int i, int j, int** visited,char* word,
int index,int rowSize,int colSize ){
if(i<0 || j<0||i>rowSize-1||j>colSize-1||visited[i][j]==1||board[i][j]!=word[index]){
return false;
}
if(index == strlen(word) - 1){
return true;
}
visited[i][j] = 1;//标记已访问,防止(比如)右边的元素向左回头访问当前元素
bool top = backtracking(board,i-1,j,visited,word,index+1,rowSize,colSize);
bool left = backtracking(board,i,j-1,visited,word,index+1,rowSize,colSize);
bool down = backtracking(board,i+1,j,visited,word,index+1,rowSize,colSize);
bool right = backtracking(board,i,j+1,visited,word,index+1,rowSize,colSize);
bool res = (top||left||down||right);
visited[i][j] = 0;
return res;
}
bool exist(char** board, int boardSize, int* boardColSize, char* word) {
int row = boardSize;
int col = boardColSize[0];
//分配visited的内存
int** visited = (int**)malloc(sizeof(int*)*row);
//为每行分配内存
for(int i=0;i<=row-1;i++){
visited[i] = (int*)malloc(sizeof(int)*col);
for(int j = 0;j<=col-1;j++){
visited[i][j]=0;
}
}
for(int i = 0;i<=row-1;i++){
for(int j = 0;j<=col-1;j++){
if(backtracking(board,i,j,visited,word,0,row,col)){
return true;
}
}
}
return false;
}