728x90
https://www.acmicpc.net/problem/17070
간단하게 가로일떄 세로일때 대각선일때 어떻게 파이프를 움직여나갈건지
DFS로 탐색하며
마지막칸에 도달시 카운트를 한개씩 올려줬다.
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
|
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int cnt = 0;
int arr[17][17];
bool visit[17][17];
//state 가 0이면 가로상태, 1이면 세로상태, 2면 대각선상태를 나타냄
int dfs(int a, int b, int state) {
if (a >= n || b >= n || arr[a][b] == 1) return 0;
if (state == 2 && (arr[a][b] == 1 || arr[a - 1][b] == 1 || arr[a][b - 1] == 1)) return 0;
if (a == n - 1 && b == n - 1) {
cnt++;
return 0;
}
if (state == 0) {
dfs(a, b + 1, 0);
dfs(a + 1, b + 1, 2);
}
else if (state == 1) {
dfs(a + 1, b, 1);
dfs(a + 1, b + 1, 2);
}
else {
dfs(a + 1, b, 1);
dfs(a, b + 1, 0);
dfs(a + 1, b + 1, 2);
}
return 0;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> arr[i][j];
dfs(0, 1, 0);
cout << cnt;
return 0;
}
|
cs |
728x90
'PS > 백준' 카테고리의 다른 글
[백준 17471번] 게리맨더링 C++ (0) | 2021.05.16 |
---|---|
[백준 17281번] ⚾(야구) C++ (1) | 2021.05.16 |
[백준 2156번] 포도주 시식 c++ (0) | 2021.05.13 |
[백준 10844번] 쉬운 계단 수 C++ (0) | 2021.05.13 |
[백준 2579번] 계단 오르기 C++ (0) | 2021.05.12 |