Submission
Status:
PPPPPPPP
Score: 100
User: Monasm
Problemset: Sirabyrinth 3
Language: cpp
Time: 0.003 second
Submitted On: 2024-11-21 20:07:50
#include <bits/stdc++.h>
using namespace std;
int gx[] = {1,-1,0,0};
int gy[] = {0,0,1,-1};
int main(){
int n,m;cin>>n>>m;
priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>> pq;
vector<vector<char>> adj(n,vector<char>(m));
vector<vector<int>> dist(n,vector<int>(m,1e9));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>adj[i][j];
if(adj[i][j]=='S'){
pq.push({0,{i,j}});
dist[i][j] = 0;
}
}
}
int ans=1e9;
while(!pq.empty()){
int d = pq.top().first;
int nx = pq.top().second.first;
int ny = pq.top().second.second;
pq.pop();
for(int i=0;i<4;i++){
int x=gx[i]+nx,y=gy[i]+ny;
if(!(0<=x&&x<n&&0<=y&&y<m)){
continue;
}
if(adj[x][y] == '#'){
if(dist[x][y]>d+1){
dist[x][y]=d+1;
pq.push({d+1,{x,y}});
}
}
else if(adj[x][y] == '.'){
if(dist[x][y]>d){
dist[x][y]=d;
pq.push({d,{x,y}});
}
}
}
}
for(int i=0;i<n;i++){
ans=min(ans,dist[i][0]);
ans=min(ans,dist[i][m-1]);
}
for(int i=0;i<m;i++){
ans=min(ans,dist[0][i]);
ans=min(ans,dist[n-1][i]);
}
cout<<ans;
}