zoukankan      html  css  js  c++  java
  • 剑指offer面试题67:机器人的运动范围

    这道题又是一道回溯算法的问题。关于回溯算法,并不是特别擅长,这道题真的是不错的练手题目。可以通过这道题更加深刻的理解下回溯算法是怎么回事。

    这道题一开始有几个疑惑的地方,就是回溯的时候怎么处理有的点进行了多次递归的问题。答案之中用了一个动态数组就轻松解决了这个问题。

    这道题可以用四个函数来解决这个问题。

    看完书上的内容,代码成功的默写出来了。代码如下:

    //函数入口。
    int MovingCount(int threshhold, int rows, int columns)
    {
        bool* HasVisited = new bool[rows*columns];
        for (int i = 0; i < rows*columns; ++i)
        {
            HasVisited[i] = false;
        }
        int count = MovingCount(threshhold, rows, columns, 0, 0, HasVisited);
        delete[] HasVisited;
        return count;
    }
    
    //进行递归算法的核心代码
    int MovingCount(int threshhold, int rows, int columns, int row, int column, bool* HasVisited)
    {
        int count = 0;
    
        if (check(threshhold, rows, columns, row, column, HasVisited))
        {
            HasVisited[row*columns + column] = true;
    
            count = 1 + MovingCount(threshhold, rows, columns, row - 1, column, HasVisited) + MovingCount(threshhold, rows, columns, row, column - 1, HasVisited) + MovingCount(threshhold, rows, columns, row + 1, column, HasVisited) + MovingCount(threshhold, rows, columns, row, column + 1, HasVisited);
        }
    
        return count;
    }
    
    //判断这个点是否合适
    bool check(int threshhold, int rows, int columns, int row, int column, bool* HasVisited)
    {
        if (row < rows&&column < columns&&HasVisited[row*columns + column] == false && GetDigitNum(row) + GetDigitNum(column) <= threshhold)
            return true;
        else
            return false;
    }
    
    int GetDigitNum(int number)
    {
        int sum = 0;
        while (number > 0)
        {
            sum += number % 10;
            number /= 10;
        }
        return sum;
    }

    现在已经基本上理解了这道题的意思了。感觉还不错。不过,有一点要注意,一定要找时间复习一下。很容易忘记的。

  • 相关阅读:
    LINUX 蓝牙耳机的配置方法
    Android_0.9 蓝牙栈bluez使用方法
    G1 安装 Linux Debian system
    Linux下基于Bluez4.x的蓝牙耳机配置
    【转】ARM平台上蓝牙协议栈Bluez的移植使用和配置
    Debian下编译安装驱动模块
    nginx多虚拟主机配置 Leone
    nginx以unixdomainsocket方式连接fastcgi(php) Leone
    Nginx多站点虚拟主机实现单独启动停止phpfpm、单独控制权限设置 Leone
    开启Apache2.2的deflate和expires模块来提升网页浏览速度 Leone
  • 原文地址:https://www.cnblogs.com/chengxuyuanxiaowang/p/4300326.html
Copyright © 2011-2022 走看看