美文网首页
搜索路径

搜索路径

作者: LxxxR | 来源:发表于2018-05-18 23:45 被阅读0次

1,搜索所有满足条件的路径:用栈来存储当前路径,打印满足满足条件的路径,最后栈为空

void DFS(root)
{
    if(root){
        path.push(root); //该节点入栈

        if(是一条路径)
        {
            if(该路径满足条件)
                打印该路径;
            path.pop(); //返回前要出栈
            return;  //该分支搜索结束
        }

        for(i=分支下界;i<分支上界;i++){
            DFS(分支i);
        }

        path.push();//root的所有分支执行完,root出栈,最后栈空
    }
}

2,搜索满足条件的一条路径,并存在栈里:加一个found表明每个分支是否得到一条合适路径,得到一个时就return,不再执行后面的分支

bool DFS(root)
{
    if(root){
        path.push(root);

        if(是一条路径)
        {
            if(该路径满足条件)
                return true;
            else{
                path.pop();
                return false;
            }
        }

        bool found=false;

        for(i=分支下界;i<分支上界 && !found;i++){ //只要找到一条,就不再进行别的分支
            found=DFS(分支i);  
        }  

        if(!found)
            path.pop();  //不是答案时要出栈,是答案时要留栈
        return found; 
    }
    return false;
}

题目要求保存符合某种条件的路径。在主函数中设置stack和DFS的初始值,然后调用DFS,初始值传给DFS函数,stack则采用值传递。
例1:二叉树中和为某值的所有路径

  vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
        vector<vector<int> > ans;
        vector<int> path;
        int sum=0;
        if(root)
            DFS(root,expectNumber,ans,path,sum);
        return ans;
    }

    void DFS(TreeNode* root,int t,vector<vector<int> > &ans,vector<int> &path,int &sum){
        if(root){
            path.push_back(root->val);
            sum+=root->val;

            if(!root->left && !root->right){ //是一条路径
                if(sum==t)
                    ans.push_back(path);
                path.pop_back(); //返回前要出栈
                sum-=root->val;
                return;
            }

            if(root->left)
                DFS(root->left,t,ans,path,sum);
            if(root->right)
                DFS(root->right,t,ans,path,sum);

            path.pop_back();  //返回前要出栈
            sum-=root->val;         
        }
    }

例2:机器人的运动范围
m*n的方格。机器[0,0]开始移动,每次能向左,右,上,下四个方向移动,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

class Solution {
public:
    int step[4][2]={-1,0,1,0,0,-1,0,1}; //四个方向
    int movingCount(int threshold, int rows, int cols)
    {
        if(!rows || !cols) return 0;

        const int nums=rows*cols;
        vector<int> index(nums,0); //访问标记

        DFS(threshold,rows,cols,0,0,index);

        int ans=0;
        for(int i=0;i<index.size();i++)
            ans+=index[i];

        return ans;
    }

    void DFS(int threshold, int rows, int cols,int i,int j,vector<int>& index){
        if(i<0 || i>=rows || j<0 || j>=cols) //1.不在矩阵内
            return;
        if(index[i*cols+j]==1) //2.已访问过
            return;
        if(!islegal(i,j,threshold)) //3.位置不合法
            return;

        index[i*cols+j]=1; //上述三个条件都不满足,就可以访问该位置
        for(int k=0;k<4;k++)
            DFS(threshold,rows,cols,i+step[k][0],j+step[k][1],index); //递归访问该位置周围的四个位置   
        
        return;  
    }

    bool islegal(int i,int j,int threshold){
        int sum=0;
        while(i){
            sum+=i%10;
            i/=10;
        }
        while(j){
            sum+=j%10;
            j/=10;
        }
        if(sum<=threshold)
            return true;
        return false;
    }
};

相关文章

  • 搜索路径

    1,搜索所有满足条件的路径:用栈来存储当前路径,打印满足满足条件的路径,最后栈为空 2,搜索满足条件的一条路径,并...

  • 搜索路径

    这个时代的知识爆炸,到底该怎么判断什么要学,什么不要学呢? 拿我们生活里的事儿打个比方——理财这种常用但用不好的技...

  • python模块搜索路径的方式

    永久设置python搜索路径:PYTHONPATH、.pth文件、pycharm设置 临时设置python搜索路径...

  • import

    普通 Python 模块的搜索路径 在当前模块所在路径中搜索导入模块 在环境变量 PYTHONPATH 指定的路径...

  • dfs搜索路径

    1 规定一个搜索顺序(右下左上)2 标记起点(book[1][1] = 1)3 dfs:

  • bfs搜索路径

    bfs(二维数组方式储存图)使用queue来操作: bfs如果仅有一条最短路径,可直接设置flag结束遍历,因为广...

  • 搜索信息路径

    作业:搜集大佬对于沈南腾的评价,并说明出处。 来源:百度 搜索关键词:沈南腾 1.他是投资界的明星,在这个圈子里,...

  • Lua搜索路径

    Lua require可以加载一个 lua文件进来 搜索路径默认是 lua的安装目录可以打印package.pat...

  • CMake路径搜索

    目录:cmake中定义搜索路径修改环境变量增加搜索路径FIND 系列指令,通过FIND寻找路径并进行添加大型开源库...

  • iOS FileManager 文件及文件夹处理

    FileManager 1. 获取用户文档目录路径 2. 搜索 对指定路径执行浅搜索,返回指定目录路径下的文件、子...

网友评论

      本文标题:搜索路径

      本文链接:https://www.haomeiwen.com/subject/pdondftx.html