| //https://www.acmicpc.net/problem/2589 #include <iostream> |
| #include <queue> |
| #include <utility> |
| using namespace std; |
| char map[50][50]; |
| int visited[50][50]; |
| int N,M, mx; |
| int dy[4]={0,0,1,-1}; |
| int dx[4]={1,-1,0,0}; |
| void init(){ |
| for(int i=0; i<N; i++) |
| for(int j=0; j<M; j++) |
| visited[i][j]=0; |
| } |
| void bfs(int y, int x){ |
| queue< pair<int, int> > q; |
| q.push(make_pair(y,x)); |
| visited[y][x]=1; |
| while(!q.empty()){ |
| y=q.front().first; |
| x=q.front().second; |
| q.pop(); |
| for(int i=0; i<4; i++){ |
| int ny=y+dy[i]; |
| int nx=x+dx[i]; |
| if(ny>=0 && ny<N && nx>=0 && nx<M){ |
| if(map[ny][nx]=='L' && !visited[ny][nx]){ |
| q.push(make_pair(ny,nx)); |
| visited[ny][nx]=visited[y][x]+1; |
| if(visited[ny][nx]>mx) mx=visited[ny][nx]; |
| } |
| } |
| } |
| } |
| } |
| int main(){ |
| cin >> N >> M; |
| for(int i=0; i<N; i++) |
| cin >> map[i]; |
| for(int i=0; i<N; i++) |
| for(int j=0; j<M; j++){ |
| if(map[i][j]=='L'){ |
| init(); |
| bfs(i,j); |
| } |
| } |
| cout << mx-1; |
| } |
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
| 180207_2606_바이러스 (0) | 2018.02.07 |
|---|---|
| 180206_5014_스타트링크 (0) | 2018.02.06 |
| 180203_1010_다리 놓기 (0) | 2018.02.03 |
| 180202_2146_다리 만들기 (0) | 2018.02.02 |
| 180201_1037_약수 (0) | 2018.02.01 |