1743번 - 음식물 피하기
단순히 DFS를 돌려서, 가장 많이 인접한 값을 찾는 문제.
매번 void 형 함수를 썼는데, 리턴값을 int 로 하는 연습도 할 겸 문제를 풀었다.
<정답 코드>
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<iostream> #include<vector> using namespace std; bool check[101][101]; char map[101][101]; int dx[4] = { 0,0,1,-1 }; int dy[4] = { 1,-1,0,0 }; int n, m, k, ans; int dfs(int x, int y) { int ret = 1; check[x][y] = true; for (int d = 0; d < 4; d++) { int nx = x + dx[d]; int ny = y + dy[d]; if (nx >= 1 && ny >= 1 && nx <= n && ny <= m && !check[nx][ny] && map[nx][ny] == '#') { check[nx][ny] = true; ret += dfs(nx, ny); } } return ret; } int main() { cin >> n >> m >> k; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { map[i][j] = '.'; } } for (int i = 0; i < k; i++) { int x, y; cin >> x >> y; map[x][y] = '#'; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (map[i][j] == '#' && !check[i][j]) { int k = dfs(i, j); ans = k > ans ? k : ans; } } } cout << ans << "\n"; return 0; } | cs |
반응형