58 单词搜索

1.题目描述

2.代码及注释

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;
    
}
相关推荐
codeの诱惑18 小时前
推荐算法(一):数学基础回顾——勾股定理与欧氏距离
算法·机器学习·推荐算法
落樱弥城18 小时前
Vulkan Compute 详解
算法·ai·图形学
老约家的可汗18 小时前
list 容器详解:基本介绍与常见使用
c语言·数据结构·c++·list
Book思议-18 小时前
【数据结构】字符串模式匹配:暴力算法与 KMP 算法实现与解析
数据结构·算法·kmp算法·bf算法
客卿12318 小时前
动态规划--模板--完全背包
算法·动态规划
L-影18 小时前
下篇:一棵树能长成多少种样子?——AI中决策树的类型与作用,以及它凭什么活了六十年还没过气
人工智能·算法·决策树·ai
mifengxing18 小时前
力扣HOT100——(1)两数之和
java·数据结构·算法·leetcode·hot100
無限進步D18 小时前
算竞常用STL cpp
开发语言·c++·算法·竞赛
仟濹19 小时前
【算法打卡day34(2026-03-30 周一)】DFS专项训练(今日算法:DFS & 记忆化搜索 & 回溯)
算法·深度优先
罗湖老棍子19 小时前
【 例 1】区间和(信息学奥赛一本通- P1547)(基础线段树和单点修改区间查询树状数组模版)
数据结构·算法·线段树·树状数组·单点修改 区间查询