Другие языки программирования и технологии

Помогите пожалуйста разобрать задачу по програмированию на C++.

Надо составить программу на языке C++.Помогите пожалуйста. Заранее Благодарен!
#include <algorithm>
#include <iostream>

#define D -1
#define X -2

int main() {
    int w, h, bi[80][80], bw[80][80], xb, yb, xe, ye;

    std::cin >> w >> h; std::cin.get();
    std::fill_n(&bi[0][0], w + 4, X);
    std::fill_n(&bi[1][1], w + 2, D);
    std::fill_n(&bi[h + 3][0], w + 4, X);
    std::fill_n(&bi[h + 2][1], w + 2, D);
    bi[1][0] = bi[1][w + 3] = bi[h + 2][0] = bi[h + 2][w + 3] = X;
    for (int r = 2; r < h + 2; ++r) {
        bi[r][0] = bi[r][w + 3] = X;
        bi[r][1] = bi[r][w + 2] = D;
        for (int c = 2; c < w + 2; ++c) bi[r][c] = std::cin.get() == 'X' ? X : D;
        std::cin.get();
    }
    std::cin >> xb >> yb >> xe >> ye;
    while (xb) {
        int l = 0;
        bool s, o = false;

        for (int r = 0; r < h + 4; ++r) std::copy(bi[r], bi[r] + w + 4, bw[r]);
        ++xb; ++yb; ++xe; ++ye;
        bw[yb][xb] = 0;
        do {
            s = false;
            for (int r = 1; r < h + 3 && !o; ++r) {
                for (int c = 1; c < w + 3 && !o; ++c) {
                    if (bw[r][c] == l) {
                        if ( ((c == xe) && (r - 1 == ye || r + 1 == ye)) ||
                            ((r == ye) && (c - 1 == xe || c + 1 == xe)) ) {
                            o = true;
                            break;
                        }
                        if (bw[r - 1][c] == D) { bw[r - 1][c] = l + 1; s = true; }
                        if (bw[r + 1][c] == D) { bw[r + 1][c] = l + 1; s = true; }
                        if (bw[r][c - 1] == D) { bw[r][c - 1] = l + 1; s = true; }
                        if (bw[r][c + 1] == D) { bw[r][c + 1] = l + 1; s = true; }
                    }
                }
            }
            ++l;
        } while (s && !o);
        std::cout << (o? l : 0) << '\n';
        std::cin >> xb >> yb >> xe >> ye;
    }
    return 0;
}
Анатолий Корякин
Анатолий Корякин
85 171
Лучший ответ