Тема: лабіринт, пройти всі клітинки матриці по дорозі до виходу
Привіт всім, не виходить мені ніяк переписати cpp код на пайтон
суть завдання в тому, шо потрібно пройти в квадраті(матриці) від клітинки 1 до клітинки 2 так, щоб відвідати всі клітинки по одному разу, не потрапляючи у чорні.
чує моє серденько, що десь я на**планив в функ step, чи є умільці які можуть допомогти\ підказати?д
cpp
#include <iostream>
#include <iomanip>
using namespace std;
int m[6][6] = {
{2,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,2,0,0},
{0,0,0,0,0,0}
};
struct Coord
{
int r = 0, c = 0;
Coord(int r = 0, int c = 0) :r(r), c(c) {}
};
const int STOP = 34; //36 - 2;
Coord path[STOP];
bool step(int r, int c, int level)
{
if (level == STOP - 1)
{
if (r == 3 && c == 5)
{
for (int i = 0; i < level; ++i)
{
cout << "(" << path[i].r << "," << path[i].c << ") - ";
}
cout << "(3,5)\n";
return true;
}
else
{
return false;
}
}
m[r][c] = 1;
path[level] = Coord(r, c);
if (c > 0 && m[r][c - 1] == 0)
{
if (step(r, c - 1, level + 1)) return true;
}
if (c < 5 && m[r][c + 1] == 0)
{
if (step(r, c + 1, level + 1)) return true;
}
if (r > 0 && m[r - 1][c] == 0)
{
if (step(r - 1, c, level + 1)) return true;
}
if (r < 5 && m[r + 1][c] == 0)
{
if (step(r + 1, c, level + 1)) return true;
}
m[r][c] = 0;
return false;
}
int main(int argc, const char* argv[])
{
step(0, 1, 0);
}
python
m = [
[2, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 2, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]
]
STOP = 34
r = 0
c = 0
def init(r= 0, c= 0) -> None:
r = 0
c = 0
def step(r, c, level):
if level == STOP - 1:
if r == 3 and c == 5:
for i in range(0, level):
print("(" + init(int(r), int(c)) + "," + init(int(r), int(c)) + ") - ")
print("(3,5)\n")
return True
else:
return False
m[r][c] = 1
if c > 0 and m[r][c - 1] == 0:
if step(r, c - 1, level + 1):
return True
if c < 5 and m[r][c + 1] == 0:
if (step(r, c + 1, level + 1)):
return True
if r > 0 and m[r - 1][c] == 0:
if (step(r - 1, c, level + 1)):
return True
if r < 5 and m[r + 1][c] == 0:
if (step(r + 1, c, level + 1)):
return True
m[r][c] = 0
return False
if __name__ == '__main__':
step(0, 1, 0)
https://imgur.com/ubpToWE картинка для наглядності