문제접근
•
한 지점씩 방문하면서 방문할 수 있는지 섬인지 파악하고 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++
복사