#include #include #include #include using namespace std; const int INF = 1e9; int main() { int H, W; cin >> H >> W; vector C(H); for (int i = 0; i < H; ++i) cin >> C[i]; vector> dist(H, vector(W, INF)); priority_queue>, vector>>, greater>>> pq; dist[0][0] = 0; pq.push({0, {0, 0}}); int dy[] = {1, -1, 0, 0}; int dx[] = {0, 0, 1, -1}; while (!pq.empty()) { int d = pq.top().first; int y = pq.top().second.first; int x = pq.top().second.second; pq.pop(); if (d > dist[y][x]) continue; for (int i = 0; i < 4; ++i) { int ny = y + dy[i]; int nx = x + dx[i]; if (ny >= 0 && ny < H && nx >= 0 && nx < W) { int cost = 1; if (C[ny][nx] == '#' && C[y][x] != '#') cost = 2; if (dist[ny][nx] > d + cost) { dist[ny][nx] = d + cost; pq.push({dist[ny][nx], {ny, nx}}); } } } } cout << dist[H - 1][W - 1] << endl; return 0; }