单词搜索

Posted onlyandonly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单词搜索相关的知识,希望对你有一定的参考价值。

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  [‘A‘,‘B‘,‘C‘,‘E‘],
  [‘S‘,‘F‘,‘C‘,‘S‘],
  [‘A‘,‘D‘,‘E‘,‘E‘]
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

 

一开始只写了向四周搜索的递归,但是哪有那么简单。。由于正确的路径每个方向都有可能,所以需要用到回溯,即完成某个点后面的递归,要把它重新设为未访问过。

 

void search(char** board,char* word,int** visited,int index,int x,int y,int row,int col,int n,bool* flag)
{
    if(index==n)
    {
        *flag=true;
        return ;
    }
    if(x<0||y<0||x==row||y==col||visited[x][y]||board[x][y]!=word[index]||*flag)
        return;
    visited[x][y]=1;
    search(board,word,visited,index+1,x+1,y,row,col,n,flag);
    search(board,word,visited,index+1,x-1,y,row,col,n,flag);
    search(board,word,visited,index+1,x,y+1,row,col,n,flag);
    search(board,word,visited,index+1,x,y-1,row,col,n,flag);
    visited[x][y]=0;
}
bool exist(char** board, int boardRowSize, int boardColSize, char* word) {
    int i,j,n=strlen(word);
    bool flag=false;
    int **visited=(int **)malloc(sizeof(int *)*boardRowSize);
    for(i=0;i<boardRowSize;i++)
        visited[i]=(int *)malloc(sizeof(int)*boardColSize);
    for(i=0;i<boardRowSize;i++)
        for(j=0;j<boardColSize;j++)
            visited[i][j]=0;
    for(i=0;i<boardRowSize;i++)
        for(j=0;j<boardColSize;j++)
        {
            if(board[i][j]==word[0])
            {
                search(board,word,visited,0,i,j,boardRowSize,boardColSize,n,&flag);
                if(flag)
                    return flag;
            }
        }
    return flag;
}

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  [‘A‘,‘B‘,‘C‘,‘E‘],
  [‘S‘,‘F‘,‘C‘,‘S‘],
  [‘A‘,‘D‘,‘E‘,‘E‘]
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

以上是关于单词搜索的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

4个单词,谷歌返回16个SQL注入漏洞

4 个单词,谷歌返回 16 个 SQL 注入漏洞...

4 个单词,谷歌返回 16 个 SQL 注入漏洞...

给定一个文档,选择一个相关的片段

编写一个程序, 将 a.txt 文件中的单词与 b.txt 文件中的 单词交替合并到 c.txt 文件中, a.txt 文件中的单词用回车符 分隔, b.txt 文件中用回车或空格进行分隔。(代码片段