Submission

Status:
x-P-P--P

Score: 39

User: Jibhong

Problemset: Sirabyrinth 3

Language: cpp

Time: 0.003 second

Submitted On: 2024-12-14 19:27:46

#include <bits/stdc++.h>
using namespace std;

typedef struct cell{
    int x;
    int y;
    int dist;
}cell;

vector <string> grid;
queue <cell> floodq;
bool visited [110][110];

void add_cell(cell nowcell){
    if (grid[nowcell.y][nowcell.x]=='#')
        ++nowcell.dist;
    floodq.emplace(nowcell);
    return;
}

int main(){
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;++i){
        string inp;
        cin>>inp;
        grid.emplace_back(inp);
        for(int j=0;j<m;++j){
            if(inp[j]=='S'){
                cell startcell = {i,j,0};
                floodq.emplace(startcell);
            }
        }
    }

    int mindist=2e9;
        
    while(!floodq.empty()){

        cell lastcell=floodq.front();
        floodq.pop();

        if(visited[lastcell.x][lastcell.y])continue;
        visited[lastcell.x][lastcell.y]=1;

        if (lastcell.x==0 || lastcell.x ==n || lastcell.y==0 ||lastcell.y ==m){
            mindist=min(mindist,lastcell.dist);
        }

        if (lastcell.x + 1 <  n && !visited[lastcell.x + 1][lastcell.y]) {
            cell nowcell=lastcell;
            ++nowcell.x;
            add_cell(nowcell);
        }
        if (lastcell.x - 1 >= 0 && !visited[lastcell.x - 1][lastcell.y]) {
            cell nowcell=lastcell;
            --nowcell.x;
            add_cell(nowcell);
        }
        if (lastcell.y + 1 <  m && !visited[lastcell.x][lastcell.y + 1]) {
            cell nowcell=lastcell;
            ++nowcell.y;
            add_cell(nowcell);
        }
        if (lastcell.y - 1 >= 0 && !visited[lastcell.x][lastcell.y - 1]) {
            cell nowcell=lastcell;
            --nowcell.y;
            add_cell(nowcell);
        }
    }

    cout<<mindist;

    return 0;
}