Submission
Status:
PPPPPPPP
Score: 100
User: Dormon
Problemset: Sirabyrinth 3
Language: cpp
Time: 0.002 second
Submitted On: 2024-12-02 12:37:31
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <functional>
#include <queue>
#define debug(...) Debug(#__VA_ARGS__, __VA_ARGS__)
using namespace std;
template<typename T>
typename std::enable_if<std::is_integral<T>::value>::type
Debug(const char* name, T value) {
std::cout << name << " : " << value << '\n';
}
template<typename T, typename... Args>
typename std::enable_if<std::is_integral<T>::value>::type
Debug(const char* names, T value, Args... args) {
const char* comma = strchr(names, ',');
std::cout.write(names, comma - names) << " : " << value << " | ";
Debug(comma + 1, args...);
}
struct heap{
int i, j, w;
bool operator < (const heap &o) const {
return w > o.w;
}
};
vector<pair<int, int>> dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
void solve(){
priority_queue<heap> pq;
int n, m;
cin >> n >> m;
vector<string> grid(n+2);
vector<vector<int>> dist(n+2, vector<int>(m+2, 1e9));
for (int i = 1;i <= n;i++){
cin >> grid[i];
grid[i] = '.' + grid[i] + '.';
for (int j = 1;j <= m;j++)
if (grid[i][j] == 'S')
pq.push({i, j, 0});
}
auto out = [&](int i, int j) -> bool {
return i < 1 || i > n || j < 1 || j > m;
};
while (!pq.empty()){
auto [i, j, w] = pq.top(); pq.pop();
if (w >= dist[i][j]) continue;
dist[i][j] = w;
for (auto [di, dj]:dir){
if (out(i+di, j+dj)){
cout << w << '\n';
return ;
}
int ww = (grid[i+di][j+dj] == '#');
pq.push({i+di, j+dj, w+ww});
}
}
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
int q = 1;
//cin >> q;
while (q--){
solve();
}
}