Submission

Status:

[P-SSSSSSSS]

Score: 0

User: lobatza

Problemset: Sirabyrinth 5

Language: cpp

Time: 0.002 second

Submitted On: 2025-03-19 05:37:48

#include <bits/stdc++.h>
using namespace std;

int gx[] = {1,-1,0,0}, gy[] = {0,0,-1,1};

int main(){
    int n, m, sx, sy, d, ans; 
    cin >> n >> m;
    char adj[n][m];
    int dist[n][m];
    queue<pair<int,int>> q;
    for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) {
        dist[i][j]=1e9;
        cin >> adj[i][j];
        if(adj[i][j] == 'E') q.push({i, j}), dist[i][j] = 0;
        if(adj[i][j] == 'S') sx = i, sy = j;
    }
    while (!q.empty()) {
        auto [nx, ny] = q.front(); q.pop();
        for(int i = 0; i < 4; i++) {
            int x = nx + gx[i], y = ny + gy[i];
            if (x >= 0 && x < n && y >= 0 && y < m && adj[x][y] != '#' && dist[x][y] > dist[nx][ny] + 1)
                q.push({x, y}), dist[x][y] = dist[nx][ny] + 1;
        }
    }
    d = dist[sx][sy], ans = d + 1;
    for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) 
        if(isdigit(adj[i][j]) && dist[i][j] <= d) ans += adj[i][j] - '0';
    cout << ans;
}