Dolphins의 HelloWorld
[백준]Baekjoon2178(BFS) 본문
문제링크 : https://www.acmicpc.net/problem/2178
이 문제에서는 BFS를 쓰면서 길이를 같이 계산할 수 있는 장치를 함께 두어야한다.
길이를 구하기 위해 만약 현재 좌표에서 갈 수 있는 다음 좌표가 아직 탐색되지 않았다면
현재좌표 + 1을 다음 좌표에 주는 방식으로 진행하였다.
그렇게 진행하다 보면 도착점이 탐색되자마자 설정된 숫자가 최단 길이가 된다.
#include <iostream> #include <queue> #include <algorithm> using namespace std; int arr[100][100]; int dx[4] = { 1,-1,0,0 }; int dy[4] = { 0,0,1,-1 }; int N, M; int BFS() { queue<pair<int, int>> q; q.push(make_pair(0, 0)); int x, y; while (arr[N-1][M-1] == 1){ 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 (arr[nx][ny] == 1) { arr[nx][ny] = arr[x][y] + 1; q.push(make_pair(nx, ny)); if (nx == N - 1 && ny == M - 1) break; } } } } return arr[N-1][M-1]; } int main() { scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { scanf("%1d", &arr[i][j]); } } printf("%d\n", BFS()); }
'Algorithm > baekjoon문제풀이' 카테고리의 다른 글
[백준]Baekjoon2146(DFS,BFS) (0) | 2018.08.17 |
---|---|
[백준]Baekjoon7576(BFS) (0) | 2018.08.16 |
[백준]Baekjoon2667(DFS,BFS) (0) | 2018.08.16 |
[백준]Baekjoon9466(DFS,cycle) (0) | 2018.08.16 |
[백준]Baekjoon2331(반복수열) (0) | 2018.08.16 |
Comments