Search
Duplicate
📗

섬의 개수

주차
문제번호
4963
언어
C++
티어
실버
유형
그래프
DFS
BFS
nj_Blog
nj_상태
이해도
100%
풀이
사람
이해도 2
13 more properties

문제접근

한 지점씩 방문하면서 방문할 수 있는지 섬인지 파악하고 dfs로 8방위 체크

놓쳤던 부분

지역변수와 전역변수를 같은 이름으로 선언하여 오류
n,m(row, col)이 무엇을 가리키는지 착각
한 가지 경우만 도는게 아니라 board, visited를 계속 초기화 해줬어야 했음

코드

2208 KB

0 ms

#include <iostream> #include <vector> using namespace std; int row, col; vector<vector<int> > board; vector<vector<int> > visited; void dfs(int i, int j) { if (i < 0 || i >= row || j < 0 || j >= col || visited[i][j] == 1 || board[i][j] == 0) return ; visited[i][j] = 1; dfs(i - 1, j); dfs(i - 1, j + 1); dfs(i, j + 1); dfs(i + 1, j + 1); dfs(i + 1, j); dfs(i + 1, j - 1); dfs(i, j - 1); dfs(i - 1, j - 1); } int main(void) { int answer = 0; ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); for (;;) { cin >> col >> row; if (col == 0 && row == 0) break ; board.clear(); visited.clear(); board.resize(row, vector<int>(col, 0)); visited = board; for (int i = 0; i < row; i++) for (int j = 0; j < col; j++) cin >> board[i][j]; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (board[i][j] == 1 && visited[i][j] == 0) { answer++; dfs(i, j); } } } cout << answer << "\n"; answer = 0; } return (0); }
C++
복사