๊ตฌ๋ฆ
์ด๋ผ๋ ๊ณณ์์ ๋ฌธ์ ํ์ด ์ฑ๋ฆฐ์ง(๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง)๋ฅผ ํ๋ค๊ณ ํด์ ์ฐธ์ฌ ์ค์ด๋ค. ์ด๋ฒคํธ ๊ธฐ๊ฐ ๋์ ๋ฌธ์ ๊ฐ ๊พธ์ค์ด ์ฌ๋ผ์ค๋ฉฐ, ์ฃผ์ 2ํ์ฉ (ํน์ ๊ทธ ์ด์) ์ฑ๋ฆฐ์ง ๋ฌธ์ ๋ค์ ๋ํด ํ์ด๊ฐ ๊ฐ๋ฅํ ๋ฌธ์ ๋ค์ ํ์ดํด๋ณด๊ณ , ํ๊ธฐ๋ฅผ ๋จ๊ฒจ๋ณด๋ ค๊ณ ํ๋ค.
์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ ์กฐ๊ธ ๋
ผ๋์ด ์์ ์ ์๊ฒ ๋ค. ์๋ํ๋ฉด, ์๋ฌด๋ฆฌ ๋ด๋ ๊ตฌ๋ฆ IDE์์ ์คํ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ ์ฝ์กฐ๊ฑด์ด ๋ณด์ด์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ์ผ๋ฐ์ ์ธ ์๋์ฐ ํ๊ฒฝ์ด๋ผ๋ฉด ๋ณดํต ์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ 1MB
์ ๋๋ก ๋ณด๋๋ฐ, ๊ทธ๋ด ๊ฒฝ์ฐ์๋ DFS
๋ก ๋งต ํ์์ ๊ตฌํํ๋ฉด ์ ์ฒด ๋งต์ ํฌ๊ธฐ๊ฐ ์ด๋ฏ๋ก, stack overflow
๊ฐ ๋ ์ ์๋ค. ํ์ง๋ง ์ด๊ฒ์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ ๊ฐ์ด๋ฏ๋ก, DFS
๋ก ํ์๋ค๊ณ RTE
๊ฐ ๋๋ ๊ฒ์ ์กฐ๊ธ ๋์ผ์ค๋ผ๊ณ ํ ์ ์๊ฒ ๋ค. (์๋๋ฉด ๋ฌธ์ ์กฐ๊ฑด์ ์คํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ช
์ํ๋ฉด ๋๋ค.)
์๋ฌดํผ ๋ฌธ์ ์์ฒด๋ ๊ฐ๋จํ BFS
๋ก ๊ตฌํํ ์ ์๋ ๊ฐ๋จํ ๋งต ํ์ ๋ฌธ์ ์ด๋ค. ๋งต์ ํ์ํ๋ค๊ฐ ์ ๋ฐ๊ฒฌํ๋ฉด ํด๋น ์ขํ ๊ธฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๊ฒ๋ค์ 0์ผ๋ก ๋ง๋ค๊ณ ๊ณ์ ํ์ํ๊ณ ๋ฅผ ๋ฐ๋ณตํด์ฃผ๋ฉด ๋๋ค. ๊ฐ๋จํ ๋ฌธ์ ์ธ๋ฐ ์ ์ด์๋ก ์ฝ์ง์ ์ข ํ๋ค.
#include <stdio.h>int M[1010][1010];int dy[4] = {0, 1, 0, -1};int dx[4] = {1, 0, -1, 0};struct P {int y, x;};P q[2000000];int qf, qr;void clear(int y, int x) {qf = qr = 0;q[qr++] = {y, x};while(qf != qr) {auto& cur = q[qf++];if (M[cur.y][cur.x] == 0) continue;M[cur.y][cur.x] = 0;for(int i = 0; i < 4; ++i) {if (M[cur.y + dy[i]][cur.x + dx[i]] == 1)q[qr++] = {cur.y + dy[i], cur.x + dx[i]};}}}int main() {int N; scanf("%d", &N);for(int i = 1; i <= N; ++i) {for(int j = 1; j <= N; ++j) {scanf("%d", &M[i][j]);}}int ans = 0;for(int i = 1; i <= N; ++i) {for(int j = 1; j <= N; ++j) {if (M[i][j]) {clear(i, j);++ans;}}}printf("%d\n", ans);return 0;}