• Leetcode word search


    DFS。

    AC的代码

    class Solution {
    public:
    bool flag;
    bool used[250][250];
        bool exist(vector<vector<char> > &board, string word) 
        {
            if(word=="")return true;
            int m=board.size();
            if(m==0)return false;
            int n=board[0].size();
            flag=false;
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                {
                    used[i][j]=false;
                }
            }
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(!flag)dfs(0,i,j,board,word);
                }
            }
            return flag;
        }
        void dfs(int depth,int x,int y,vector<vector<char> > &board, string word)
        {
            if(flag)return;
            if(depth==word.size())
            {
                flag=true;
                return;
            }  
            if(x<0||y<0||x>=board.size()||y>=board[0].size())
            return;
            if(used[x][y])return;       
            if(board[x][y]==word[depth])
            {
                  used[x][y]=true;
                  dfs(depth+1,x,y+1,board,word);
                  dfs(depth+1,x+1,y,board,word);
                  dfs(depth+1,x-1,y,board,word);
                  dfs(depth+1,x,y-1,board,word);
                  used[x][y]=false;
            }        
        }
    };
    

     导致部分答案WA的代码:

    void dfs(int depth,int x,int y,vector<vector<char> > &board, string word)
        {
            if(x<0||y<0||x>=board.size()||y>=board[0].size())
            return;
            if(depth==word.size())
            {
                flag=true;
                return;
            }          
            if(used[x][y])return;       
            if(board[x][y]==word[depth])
            {
                  used[x][y]=true;
                  dfs(depth+1,x,y+1,board,word);
                  dfs(depth+1,x+1,y,board,word);
                  dfs(depth+1,x-1,y,board,word);
                  dfs(depth+1,x,y-1,board,word);
                  used[x][y]=false;
            }        
        }
    

     以上代码同样导致judge large时TLE,原因是重复搜索超时。

  • 相关阅读:
    oracle实例的内存(SGA和PGA)调整,优化数据库性能
    Redhat 安装perl模块
    三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解
    二、Java基础--02
    一、Java基础--01
    提醒用户收到短信
    手机屏幕更改
    查看手机信息和SIM卡信息
    还原和设置手机桌面背景
    wifi的开与关
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/3129521.html
Copyright © 2020-2023  润新知