Rat in a maze problem not printing the solution

问题描述 投票:0回答:0

我正在尝试解决迷宫中的回溯问题,但它没有打印解决方案,请查看代码并帮助我。

代码如下:

#include <bits/stdc++.h>
using namespace std;

vector<string> ans;

bool isSafe(vector<vector<int>> &matrix, vector<vector<int>> &visited, int size, int srcx, int srcy)
{
    if (srcx >= 0 && srcy >= 0 && srcy < size - 1 && srcx <= size - 1 && matrix[srcx][srcy] == 1 && !visited[srcx][srcy])
    {
        return true;
    }
    else
    {
        return false;
    }
}

void findPathUtiltity(vector<vector<int>> &matrix, vector<vector<int>> &visited, int size, int srcx, int srcy, string temp)
{
    // check if we are at (3,3)
    if (srcx == size - 1 && srcy == size - 1)
    {
        ans.push_back(temp);
        return;
    }
    // mark visited as true
    visited[srcx][srcy] = 1;
    // DOWN
    if (isSafe(matrix, visited, srcx + 1, srcy, size))
    {
        findPathUtiltity(matrix, visited, size, srcx + 1, srcy, temp + "D");
    }
    // LEFT
    if (isSafe(matrix, visited, srcx, srcy - 1, size))
    {
        findPathUtiltity(matrix, visited, size, srcx, srcy - 1, temp + "L");
    }
    // Right
    if (isSafe(matrix, visited, srcx, srcy + 1, size))
    {
        findPathUtiltity(matrix, visited, size, srcx, srcy + 1, temp + "R");
        // UP
        if (isSafe(matrix, visited, srcx - 1, srcy, size))
        {
            findPathUtiltity(matrix, visited, size, srcx - 1, srcy, temp + "U");
        }
    }
    // mark all 0 to backtrack and check all other path
    visited[srcx][srcy] = 0;
    return;
}

vector<string> findPath(vector<vector<int>> &matrix, int size)
{
    if (matrix[0][0] == 0)
    {
        return ans;
    }

    vector<vector<int>> visited(size, vector<int>(size, 0));
    findPathUtiltity(matrix, visited, size, 0, 0, "");
    return ans;
}

int main()
{

    vector<vector<int>> matrix = {
        {1, 0, 0, 0, 0},
        {1, 1, 1, 1, 1},
        {1, 1, 1, 0, 1},
        {0, 0, 0, 0, 1},
        {0, 0, 0, 0, 1}};
    vector<string> path = findPath(matrix, matrix.size());

    for (int i = 0; i < path.size(); i++)
    {
        cout << path[i] << " ";
    }

    return 0;
}

我正在尝试解决迷宫中老鼠的回溯问题,但它没有打印解决方案,我采用了向量>矩阵的矩阵; .我尝试在那里干运行,我得到了正确的输出。请查看代码并帮助我。

c++ backtracking
© www.soinside.com 2019 - 2024. All rights reserved.