1

Тема: лабіринт, пройти всі клітинки матриці по дорозі до виходу

Привіт всім, не виходить мені ніяк переписати 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 картинка для наглядності

2

Re: лабіринт, пройти всі клітинки матриці по дорозі до виходу

    if (level == STOP - 1)
    {
        if (r == 3 && c == 5) <= цей if
        {
            for (int i = 0; i < level; ++i)
            {
                cout << "(" << path[i].r << "," << path[i].c << ") - ";
            }
            cout << "(3,5)\n";
            return true;
        }
        else <===цей else
        {
            return false;
        }
    }
    if level == STOP - 1: <=== цей if
        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: <=== цей else
        return False
Подякували: leofun011

3

Re: лабіринт, пройти всі клітинки матриці по дорозі до виходу

що ви маєте на увазі з if?

koala написав:
    if (level == STOP - 1)
    {
        if (r == 3 && c == 5) <= цей if
        {
            for (int i = 0; i < level; ++i)
            {
                cout << "(" << path[i].r << "," << path[i].c << ") - ";
            }
            cout << "(3,5)\n";
            return true;
        }
        else <===цей else
        {
            return false;
        }
    }
    if level == STOP - 1: <=== цей if
        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: <=== цей else
        return False