#include <iostream>
#include <deque>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
const int INF = 1e9;
int R, C, N, Sr, Sc, Gr, Gc;
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> R >> C >> N;
cin >> Sr >> Sc >> Gr >> Gc;
Sr--, Sc--, Gr--, Gc--;
vector<string> A(R);
for (int i = 0; i < R; ++i) cin >> A[i];
vector<vector<int>> dist(R, vector<int>(C, INF));
dist[Sr][Sc] = 0;
deque<pair<int, int>> dq;
dq.push_front({Sr, Sc});
while (!dq.empty()) {
int x = dq.front().first;
int y = dq.front().second;
dq.pop_front();
for (int d = 0; d < 4; ++d) {
int nx = x + dx[d];
int ny = y + dy[d];
if (nx >= 0 && ny >= 0 && nx < R && ny < C) {
if (A[nx][ny] == '.' && dist[nx][ny] > dist[x][y]) {
dist[nx][ny] = dist[x][y];
dq.push_front({nx, ny});
}
}
}
for (int i = max(0, x - N + 1); i <= min(x, R - N); ++i) {
for (int j = max(0, y - N + 1); j <= min(y, C - N); ++j) {
for (int a = i; a < i + N; ++a) {
for (int b = j; b < j + N; ++b) {
if (A[a][b] == '#' && dist[a][b] > dist[x][y] + 1) {
dist[a][b] = dist[x][y] + 1;
dq.push_back({a, b});
A[a][b] = '.';
}
}
}
}
}
}
cout << dist[Gr][Gc] << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |