백준알고리즘

보물섬

먼지의삶 2019. 7. 17. 21:54
#include<vector>
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<string>

using namespace std;

int n,m;
int a[51][51];
bool d[51][51];
int c[51][51];

int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
void initial(){
    for(int i = 0; i <= 50; i++){
        for(int j = 0; j <= 50; j++){
            d[i][j] = false; c[i][j] = 0;
        }
    }
}

void bfs(int x, int y, vector<int>& v){
    queue<pair<int, int>> q;
    q.push(make_pair(x,y));
    d[x][y] = true;
    c[x][y] = 0;
    int result = 0;
    while(!q.empty()){
        x = q.front().first; y = q.front().second;
        q.pop();
        for(int i = 0; i < 4; i++){
            int nx = x+ dx[i]; int ny = y+dy[i];
            if(nx >= 0 && nx < n && ny >= 0 && ny <m){
                if(a[nx][ny] == 1){
                    if(d[nx][ny] == false){
                        c[nx][ny] = c[x][y]+1;
                        if(result < c[nx][ny])
                            result = c[nx][ny];
                        d[nx][ny]= true;
                        q.push(make_pair(nx,ny));
                    }
                }
            }
        }
    }
    v.push_back(result);
}


int main(){
    scanf("%d %d", &n, &m);
    char s;
    vector<pair<int, int>> land;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cin>>s;
            if(s == 'L'){
                a[i][j] = 1;
                land.push_back(make_pair(i,j));
            }
        }
    }
    vector<int> v;
    for(int i = 0; i < land.size(); i++){
        int x = land[i].first; int y = land[i].second;
        bfs(x,y,v);
        initial();

    }
    sort(v.begin(), v.end(),greater<int>());

    cout<<v[0]<<endl;
    return 0;

}

입력어떻게하지? 라고 생각들었던문제, 내용자체는 매우쉬움