zoukankan      html  css  js  c++  java
  • 题目66:矩阵中的路径

    又是一道回溯法的问题。目前关于回溯法,只是处于能看懂代码的阶段。给你一道新题,估计还是很难答得出来,不过没关系。先把这几道题弄熟了再说。

    bool HasPathCore(char* matrix, int rows, int columns, int row, int col, char* str, int &length, bool* visited)
    {
        if (str[length] == '')
            return true;
    
        bool HasPath = false;
    
        if (row < rows&&row >= 0 && col >= 0 && col < columns&&matrix[row*columns + col] == str[length] && visited[row*columns + col] == false)
        {
            ++length;
            visited[row*columns + col] = true;
            HasPath = HasPathCore(matrix, rows, columns, row, col - 1, str, length, visited) || HasPathCore(matrix, rows, columns, row, col + 1, str, length, visited) || HasPathCore(matrix, rows, columns, row - 1, col, str, length, visited) || HasPathCore(matrix, rows, columns, row + 1, col, str, length, visited);
    
            if (!HasPath)
            {
                --length;
                visited[row*columns + col] = false;
            }
        }
        return HasPath;
    }
    //确定图中是否有可以使用的路径
    bool HasPath(char* matrix, int rows, int columns, char* str)
    {
        if (matrix == NULL || rows <= 0 || columns <= 0 || str == NULL)
            return false;
    
        bool *visited = new bool[rows*columns];
    
        memset(visited, 0, rows*columns);
    
        int PathLength = 0;
        for (int col = 0; col < columns; col++)
        {
            for (int row < 0; row < rows; ++row)
            {
                if (HasPathCore(matrix, rows, columns, row, col, str, PathLength, visited))
                    return true;
            }
        }
        delete[] visited;
        return false;
    }
  • 相关阅读:
    清除/var/spool/clientmqueue/目录下的文件
    欧几里德法求最大公约数
    博客园美化
    Vue.js学习笔记-script标签在head和body的区别
    C++ 继承
    Ubuntu 更换软件源/镜像源
    12306火车票余票查询&Python实现邮件发送
    饥荒联机代码
    linux内核编程入门 hello world
    windows环境下使用C++&Socket实现文件传输
  • 原文地址:https://www.cnblogs.com/chengxuyuanxiaowang/p/4304373.html
Copyright © 2011-2022 走看看