前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法(十一) 搜索与回溯算法

算法(十一) 搜索与回溯算法

作者头像
宇宙无敌暴龙战士之心悦大王
发布2022-01-10 11:29:36
3920
发布2022-01-10 11:29:36
举报
文章被收录于专栏:kwaikwai

本质就是 深度优先搜索。

但是需要减枝操作(很重要)。

例题

题解

class Solution {
    public boolean exist(char[][] board, String word) {  
        char[] cword = word.toCharArray();
        for(int i = 0 ;i<board.length;i++){
            for(int j = 0;j<board[0].length;j++){
                 if(is_ok(i,j,0,board,cword)==true)
                    return true;
            }
        }
        return false;
    }

    boolean is_ok(int i,int j,int res,char[][] board,char[] cword){
        if(i<0||j<0||i>board.length-1||j>board[0].length-1 || board[i][j]!=cword[res])
            return false;
        if(res==cword.length - 1)
            return true;
        char temp = board[i][j];
        board[i][j] = '\0';
        res++;
        boolean qq = is_ok(i-1,j,res,board,cword) || is_ok(i,j-1,res,board,cword) || is_ok(i+1,j,res,board,cword) || is_ok(i,j+1,res,board,cword);
        board[i][j] = temp;
        return qq;
    }
}

有个很常规又很妙的减枝操作

  • 这里用visited数组的话,回溯时不好操作是否路过。
  • 所以我们可以通过节点时把点设置为空字符,最后操作完再变回去。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 例题
  • 题解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档