[백준] 17086번 : 아기 상어2 - C++

강재원·2022년 12월 1일
0

[코딩테스트] C/C++

목록 보기
193/200



https://www.acmicpc.net/problem/17086

#include<iostream>
#include<queue>
#include<vector>
using namespace std;

static int arr[51][51];
static bool check[51][51];
static int n,m;
static int dx[]= {0,0,1,-1,1,1,-1,-1};
static int dy[]= {1,-1,0,0,1,-1,-1,1};

static void set(){
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            check[i][j]=false;
        }
    }
}

static int bfs(int a,int b){
    set();
    queue<pair<pair<int,int>,int>> q;
    q.push(make_pair(make_pair(a,b),0));
    check[a][b]=true;
    
    while(!q.empty()){
        int v1=q.front().first.first;
        int v2=q.front().first.second;
        int v3=q.front().second;
        q.pop();
        
        for(int i=0;i<8;i++){
            int x=v1+dx[i];
            int y=v2+dy[i];
            int z=v3+1;
            
            if(x<0 || x>=n || y<0 || y>=m || check[x][y]==true) continue;
            if(arr[x][y]==1) return z;
            q.push(make_pair(make_pair(x,y),z));
            check[x][y]=true;
        }
    }
    return 0;
}


int main() {
    cin >> n >> m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >> arr[i][j];
        }
    }
    int count=0;
    int num=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(arr[i][j]!=1){
                num=bfs(i,j);
                count=num>count?num:count;
            }
        }
    }
    cout << count;
}
profile
개념정리 & 문법 정리 & 알고리즘 공부

0개의 댓글