Submission
Status:
xxxxPxxx
Score: 13
User: Power2two
Problemset: Sirabyrinth 3
Language: cpp
Time: 0.113 second
Submitted On: 2024-12-13 18:10:17
#include <bits/stdc++.h>
using namespace std;
queue<int> bfs[3];
void push(int a, int b, int c){
bfs[0].push(a);
bfs[1].push(b);
bfs[2].push(c);
}
int main(int argc, char** argv) {
int n,m,maxx=0;
cin>>n>>m;
char map[n][m];
int dmap[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>map[i][j];
dmap[i][j]=-1;
if(map[i][j]=='S'){
push(i,j,0);
}
}
}
while(bfs[0].empty()==0){
if((dmap[bfs[0].front()+1][bfs[1].front()]==-1 || dmap[bfs[0].front()+1][bfs[1].front()]>bfs[2].front()) && dmap[bfs[0].front()+1][bfs[1].front()]!=NULL){
if(map[bfs[0].front()][bfs[1].front()]!='#'){
push(bfs[0].front()+1, bfs[1].front(), bfs[2].front());
}
else if (map[bfs[0].front()+1][bfs[1].front()]!='#'){
push(bfs[0].front()+1, bfs[1].front(), bfs[2].front()+1);
}
else{
push(bfs[0].front()+1, bfs[1].front(), bfs[2].front());
}
}
if((dmap[bfs[0].front()][bfs[1].front()+1]==-1 || dmap[bfs[0].front()][bfs[1].front()+1]>bfs[2].front())&& dmap[bfs[0].front()+1][bfs[1].front()]!=NULL){
if(map[bfs[0].front()][bfs[1].front()]!='#'){
push(bfs[0].front(), bfs[1].front()+1, bfs[2].front());
}
else if (map[bfs[0].front()][bfs[1].front()+1]!='#'){
push(bfs[0].front(), bfs[1].front()+1, bfs[2].front()+1);
}
else{
push(bfs[0].front(), bfs[1].front()+1, bfs[2].front());
}
}
if((dmap[bfs[0].front()-1][bfs[1].front()]==-1 || dmap[bfs[0].front()-1][bfs[1].front()]>bfs[2].front())&& dmap[bfs[0].front()+1][bfs[1].front()]!=NULL){
if(map[bfs[0].front()][bfs[1].front()]!='#'){
push(bfs[0].front()-1, bfs[1].front(), bfs[2].front());
}
else if (map[bfs[0].front()-1][bfs[1].front()]!='#'){
push(bfs[0].front()-1, bfs[1].front(), bfs[2].front()+1);
}
else{
push(bfs[0].front()-1, bfs[1].front(), bfs[2].front());
}
}
if((dmap[bfs[0].front()][bfs[1].front()-1]==-1 || dmap[bfs[0].front()][bfs[1].front()-1]>bfs[2].front())&& dmap[bfs[0].front()+1][bfs[1].front()]!=NULL){
if(map[bfs[0].front()][bfs[1].front()]!='#'){
push(bfs[0].front(), bfs[1].front()-1, bfs[2].front());
}
else if (map[bfs[0].front()][bfs[1].front()-1]!='#'){
push(bfs[0].front(), bfs[1].front()-1, bfs[2].front()+1);
}
else{
push(bfs[0].front(), bfs[1].front()-1, bfs[2].front());
}
}
if(bfs[2].front()>maxx){
maxx=bfs[2].front();
}
dmap[bfs[0].front()][bfs[1].front()]=bfs[2].front();
bfs[0].pop();
bfs[1].pop();
bfs[2].pop();
}
cout<<maxx;
}