반응형
간단한 BFS문제였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <iostream> #include <queue> #include <algorithm> using namespace std; int h, w, N, M,cnt, d[101][101], a[101][101],c[101][101], dh[] = { 0,0,-1,1 }, dw[] = { -1,1,0,0}; void BFS(int h, int w) { queue <pair<int, int> > q; q.push(make_pair(h, w)); //체크 d[h][w] = ++cnt; c[h][w] = 1; while (!q.empty()) { h = q.front().first; w = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int nh = h + dh[i]; int nw = w + dw[i]; if (0 <= nh && nh < N && 0 <= nw && nw < M) if (a[nh][nw] == 1 && c[nh][nw] == 0)//원점으로부터의 거리가 같은 점끼리는 같은 거리를 대입 { q.push(make_pair(nh, nw)); //체크한 순간 cnt 는 상 하 좌 우 모두 d[h][w]+1 c[nh][nw] = 1; d[nh][nw] = d[h][w] +1; } } } } int main() { cin >> N >> M; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) scanf("%1d", &a[i][j]); for(int i = 0; i< N; i++) for(int j = 0;j <M; j++) if (a[i][j] == 1 && c[i][j] == 0)//체크가 안되어 있지만 길이 있다면 { BFS(i, j); } cout << d[N-1][M-1] << '\n'; } | cs |
'Algorithm > BFS' 카테고리의 다른 글
(C++) - 백준(BOJ)코딩 2468번 : 안전 영역 답 (0) | 2017.02.20 |
---|---|
(C++) - 백준(BOJ) 7562번 : 나이트의 이동 답 (0) | 2017.02.18 |
(C++) - 백준(BOJ)코딩 1012번 : 유기농 배추 답 (0) | 2017.02.18 |
(C++) - 백준(BOJ)코딩 1697번 : 숨바꼭질(BFS) (0) | 2017.02.15 |
(C++) - 백준(BOJ)코딩 7576번 : 토마토 답 (1) | 2017.02.09 |