码迷,mamicode.com
首页 > 其他好文 > 详细

单词搜索

时间:2018-07-18 21:42:09      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:dex   pre   必须   size   span   oar   har   i++   单词   

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

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

示例:

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.

单词搜索

标签:dex   pre   必须   size   span   oar   har   i++   单词   

原文地址:https://www.cnblogs.com/onlyandonly/p/9332524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!