Submission
Status:
xxxxxxxx
Score: 0
User: Power2two
Problemset: Sirabyrinth 3
Language: cpp
Time: 0.110 second
Submitted On: 2024-12-13 19:03:36
#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+2][m+2];
int dmap[n+2][m+2];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>map[i][j];
dmap[i][j]=-1;
if(map[i][j]=='S'){
push(i,j,0);
}
}
}
for(int i=0;i<=n+1;i++){
map[i][0]='.';
dmap[i][0]=-1;
}
for(int i=0;i<=n+1;i++){
map[i][m+1]='.';
dmap[i][m+1]=-1;
}
for(int j=0;j<=n+1;j++){
map[0][j]='.';
dmap[0][j]=-1;
}
for(int j=0;j<=n+1;j++){
map[n+1][j]='.';
dmap[n+1][j]=-1;
}
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()][bfs[1].front()+1]!=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()][bfs[1].front()-1]!=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;
}