#c #data-structures #c 14 #recursive-datastructures #debug-backtrace
Вопрос:
Крыса В Лабиринте
В каком направлении должна двигаться крыса
#include <bits/stdc .h>
#include <vector>
using namespace std;
bool isSafe(vector<vector<int>> amp;m, int i, int j, int n)
{
if (i < n amp;amp; j < n amp;amp; m[i][j] == 1)
return true;
return false;
}
int RIM(vector<vector<int>> amp;m, int i, int j, int n, string out, vector<string> amp;ans)
{
if (i == n - 1 amp;amp; j == n - 1)
{
ans.push_back(out);
return 0;
}
if (isSafe(m, i, j, n))
{
m[i][j] = 2;
//cout<< m[i][j]<<" "<< out<<endl;
out.push_back('D');
RIM(m, i 1, j, n, out, ans);
out.pop_back();
out.push_back('R');
RIM(m, i, j 1, n, out, ans);
out.pop_back();
out.push_back('U');
RIM(m, i - 1, j, n, out, ans);
out.pop_back();
out.push_back('L');
RIM(m, i, j - 1, n, out, ans);
out.pop_back();
m[i][j] = 1;
return 0;
}
return 0;
}
int main()
{
vector<string> ans;
vector<vector<int>> m{
{1, 0, 0, 0}, {1, 1, 0, 1}, {1, 1, 0, 0}, {0, 1, 1, 1}};
RIM(m, 0, 0, m.size(), "", ans);
for (auto i : ans)
cout << i << " ";
return 0;
}
ВХОД и ВЫХОД:
Input:
1 0 0 0
1 1 0 1
1 1 0 0
0 1 1 1
Output:
DDRDRR DRDDRR
Но проблема в том, что это не снимает сдвинутый вектор, который я пытался напечатать в main().
Я даже попытался объявить строковый вектор вне всех функций глобально, но даже тогда он не печатает новое присвоенное ему значение.
int RIM(vector<vector<int>> amp;m, int i, int j, int n, string out, vector<string> amp;ans)
{
if (i == n - 1 amp;amp; j == n - 1)
{
ans.push_back(out);
return 0;
}
внутри главного() :
RIM(m, 0, 0, m.size(), "", ans);
for (auto i : ans)
cout << i << " ";
Это не дает никакого результата.
Может ли кто-нибудь, пожалуйста, помочь мне решить эту проблему ?
Комментарии:
1. Работает для меня именно так, как написано
2. Обычный компилятор показывает ошибку сегментации. Но я получил ошибку, она была в цикле isSafe, она вышла из цикла в массив. В первом цикле он проверяется на 0,0, и массив смотрит в направлении от i=-1 и даже j=-1. Так вот в чем была ошибка