题目66:矩阵中的路径

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

bool HasPathCore(char* matrix, int rows, int columns, int row, int col, char* str, int &length, bool* visited)
{
    if (str[length] == ‘\0‘)
        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;
}
时间: 2024-11-09 13:22:16

题目66:矩阵中的路径的相关文章

《剑指offer》:[66]矩阵中的路径

题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中任意一格开始,每一步可以在矩阵中间向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子. 具体是例如下图: 上图中"bcced"就存在这条路径:但是"abcb"这条路径就不存在.因为进入'b'这个格子后就不能再次进入. 解决方案:主要是用回溯法.首先任意选一个入口地址,也就是任选一个格子,如果格子中的字符ch和字符串中的第一个字符相等,

66 - 矩阵中的路径

题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中任意一格开始,每一步可以在矩阵中间向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子. 例如在下面的 3*4 的矩阵中包含一条字符串"bcced"的路径.但矩阵中不包含字符串"abcb"的路径,因为字符串的第一个字符 b 占据了矩阵中的第一行第二格子之后,路径不能再次进入这个格子. a b c e s f c s a d e e 回溯

矩阵中的路径-剑指Offer

矩阵中的路径 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子. 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子.

《剑指offer》第十二题:矩阵中的路径

// 面试题12:矩阵中的路径 // 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有 // 字符的路径.路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左.右. // 上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径不能再次进入 // 该格子.例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字 // 母用下划线标出).但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个 // 字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入

剑指offer(六十五)之矩阵中的路径

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子. 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子. 代码: /*

[剑指Offer] 65.矩阵中的路径

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子. 例如[a b c e s f c s a d e e]是3*4矩阵,其包含字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子. [思路

《剑指offer》矩阵中的路径

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 题目链接:http://www.nowcoder.com/practice/c61c6999eecb4b8f88a98f66b273a3cc?rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵

剑指Offer_12_矩阵中的路径(参考问题:马踏棋盘)

题目描述  请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子. 例如: a   b  c   e s   f   c   s  a  d   e   e  矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后

回溯法 矩阵中的路径

题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子. 这是一个可以用回溯法解决的经典题.首先,在矩阵中任选一个格子作为路径的起点.假设矩阵中某个格子的字符为ch,并且这个格子将对应于路径上的第i个字符.如果路径上的第i个字符不是ch,那么这个格子不可能处在路径上的第i个位置.如果路径上的第i个字符正好是ch,那么到相邻的格子寻找路

12 矩阵中的路径

题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子. 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入