Ладья на шахматной доске с препятствиями. Поиск кратчайшего пути

Хотела бы спросить, как исправить ошибку в данной программе. Дело в том, что при прохождении шахматной доски ладья не учитывает препятствия. Все правильно передается из файла в массив, то есть обозначаются соответствующие клетки -2. Но дальше что-то идёт не так. Думаю, что ошибка в функции jump, но не знаю как ее исправить. Спасибо за помощь.

P.s. В файле просто записаны два числа на одной строке - одно выражает ряд, другое столбик.

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

const int N = 8;

int chessboard[N + 1][N + 1];
int zx[N + 1][N + 1]; //x-ová souradnice (řádek)
int zy[N + 1][N + 1]; //y-ová souradnice (sloupec)

int x, y;

void jump(int row, int column, int step = 0, int x0 = 0, int y0 = 0)
{
    if (row >= 1 && row <= N && column >= 1 && column <= N)
    {
            if (chessboard[row][column] == -1 || chessboard[row][column] > step)
            {
                chessboard[row][column] = step;
                zx[row][column] = x0;
                zy[row][column] = y0;

                for (int a = 1; a <= 7; a++)
                {
                    jump(row + a, column, step + 1, row, column);
                    jump(row - a, column, step + 1, row, column);
                    jump(row, column + a, step + 1, row, column);
                    jump(row, column - a, step + 1, row, column);
                }
            }
    }
}

void way(int row, int column)
{
    if (row >= 1 && row <= N && column >= 1 && column <= N)
    {
        way(zx[row][column], zy[row][column]);
        cout << "(" << row << "," << column << ")" << " ";
    }
}

void prohibition(int l, int p)
{
    for (int row = 1; row <= N; row++)
    {
        if (row == l)
        {
            for (int column = 1; column <= N; column++)
            {
                if (column == p)
                {
                    chessboard[row][column] = -2;
                }
            }
        }
    }
}

void openfile()
{
    string(path) = "ZakazanaPolicka.txt";
    ifstream fin;
    fin.open(path);

    if (!fin.is_open())
    {
        cout << "Nepodarilo se otevrit soubor" << endl;
    }
    else
    {
        cout << "Zakazana policka jsou: " << endl;

        while (!fin.eof())
        {
            fin >> x >> y;
            cout << "(" << x << "," << y << ") ";
            prohibition(x, y);
        }
    }
    fin.close();
}

int main()
{
    for (int row = 0; row <= N; row++)
        for (int column = 0; column <= N; column++)
        {
            chessboard[row][column] = -1;
            zx[row][column] = -1; 
            zy[row][column] = -1; 
        }
    
    openfile();
    cout << "\n\n\n";

    jump(1, 1);
    way(8, 8);
    cout << "\n\n\n"; 
}

Ответы (0 шт):