Ладья на шахматной доске с препятствиями. Поиск кратчайшего пути
Хотела бы спросить, как исправить ошибку в данной программе. Дело в том, что при прохождении шахматной доски ладья не учитывает препятствия. Все правильно передается из файла в массив, то есть обозначаются соответствующие клетки -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";
}