문제
https://www.acmicpc.net/problem/2178
걸린 시간
00 : 43 : 21
풀이
C++
#include <bits/stdc++.h>
#define INF 987654321
using namespace std;
int n, m;
int maze[100][100];
int visited[100][100];
int dx[4] = {0, 0, -1, 1};
int dy[4] = {1, -1, 0, 0};
int bfs(){
queue<pair<int, int>> q;
q.push(make_pair(0, 0));
int ans = 0;
while(!q.empty()){
ans++;
int s = q.size();
for(int i = 0; i < s; i++){
auto tmp = q.front();
int x = tmp.first;
int y = tmp.second;
q.pop();
if(x == n-1 && y == m-1)
return ans;
for(int j = 0; j < 4; j++){
int nx = x + dx[j];
int ny = y + dy[j];
if(0 <= nx && nx < n && 0 <= ny && ny < m && maze[nx][ny]){
if(!visited[nx][ny]){
visited[nx][ny] = 1;
q.push(make_pair(nx, ny));
}
}
}
}
}
}
int main(){
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
scanf("%1d", &maze[i][j]);
memset(visited, 0, sizeof(visited));
printf("%d\n", bfs());
return 0;
}
지겨운 그래프 이론 문제. 그래도 얻어갈 건 조금 있었다.
- 붙어 있는 문자가 입력으로 들어올 땐 "%1d" 를 사용하면 된다.
- bfs 구현에 사용한 for 문의 반복 조건을 .size() 메소드로 직접 접근하면 계속해서 값이 갱신되기 때문에 잘못된 결과가 나온다.
'Baekjoon' 카테고리의 다른 글
Baekjoon 11286번 절댓값 힙 (0) | 2020.08.27 |
---|---|
Baekjoon 1992번 쿼드트리 (0) | 2020.08.27 |
Baekjoon 11403번 경로 찾기 (0) | 2020.08.27 |
Baekjoon 19590번 비드맨 (0) | 2020.08.25 |
Baekjoon 2096번 내려가기 (0) | 2020.08.22 |
댓글