点击打开链接
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<cstring>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<limits.h>
#include<assert.h>
#include<sstream>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
class Solution {
public:
bool exist_helper(vector<vector<char>> board, string word, int i,int j, int index)
{
if(index==word.size()-1) return true;
char ctmp=board[i][j];
board[i][j]='#';//做标记
//上
if(i-1>=0&&board[i-1][j]==word[index+1]){
if(exist_helper(board, word, i-1, j, index+1))
return true;
}
//下
if(i+1<board.size()&&board[i+1][j]==word[index+1]){
if(exist_helper(board, word, i+1, j, index+1))
return true;
}
//左
if(j-1>=0&&board[i][j-1]==word[index+1]){
if(exist_helper(board, word, i, j-1, index+1))
return true;
}
//右
if(j+1<board[0].size()&&board[i][j+1]==word[index+1]){
if(exist_helper(board, word, i, j+1, index+1))
return true;
}
board[i][j]=ctmp;//恢复标记。典型回溯模版
return false;
}
bool exist(vector<vector<char>>& board, string word) {
if(word.size()==0) return true;
int row=board.size();
int col=board[0].size();
if(row==0||col==0) return false;
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(board[i][j]==word[0]&&exist_helper(board,word,i,j,0)) //从i j位置开始搜索。
return true;
}
}
return false;
}
};
int main()
{
Solution temple;
return 0;
}