Submission

Status:
--P-P-PP

Score: 52

User: Nathlol2

Problemset: Sirabyrinth 3

Language: cpp

Time: 0.004 second

Submitted On: 2025-01-26 14:38:49

#include <bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;
	string a[n];
	int sx, sy;
	for(int i = 0;i<n;i++){
		cin >> a[i];
		for(int j = 0;j<m;j++){
			if(a[i][j] == 'S'){
				sx = i;
				sy = j;
			}
		}
	}
	priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>, greater<tuple<int, int, int>>> pq;
	vector<vector<int>> dist(n, vector<int>(m, INT_MAX));
	dist[sx][sy] = 0;
	pq.push({0, sx, sy});
	while(!pq.empty()){
		auto [d, x, y] = pq.top();
		pq.pop();
		for(int i = 0;i<4;i++){
			int nx = x + dx[i];
			int ny = y + dy[i];
			if(nx < 0 || ny < 0 || nx >= n || ny >= m){
				continue;
			}
			if(a[nx][ny] == '#')
				d++;
			if(d < dist[nx][ny]){
				pq.push({d, nx, ny});
				dist[nx][ny] = d;
			}
		}
	}
	int ans = INT_MAX;
	for(int j = 0;j<m;j++){
		ans = min(ans,dist[0][j]);
		ans = min(ans,dist[n - 1][j]);
	}
	for(int i = 0;i<n;i++){
		ans = min(ans,dist[i][0]);
		ans= min(ans,dist[i][m - 1]);		
	}
	cout << ans << '\n';
}