#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <functional>
typedef long long int ll;
using namespace std;
#define INF 1234567890
#define N 200000
const int LIMIT = 1e+9;
int n, m;
int mmap[100][100];
int res = 0;
void dfs(int y, int x, int v, int d) {
if (d == n) {
if (mmap[y][x])
res++;
return;
}
if (mmap[y][x])
return;
mmap[y][x] = 1;
d += 1;
switch (v)
{
case 1:
dfs(y - 1, x + 1, 3, d);
dfs(y - 1, x - 1, 5, d);
break;
case 2:
dfs(y + 1, x + 1, 4, d);
dfs(y + 1, x - 1, 6, d);
break;
case 3:
dfs(y - 1, x , 1, d);
dfs(y + 1, x + 1, 4, d);
break;
case 4:
dfs(y + 1, x, 2, d);
dfs(y - 1, x + 1, 3, d);
break;
case 5:
dfs(y - 1, x, 1, d);
dfs(y + 1, x - 1, 6, d);
break;
case 6:
dfs(y + 1, x, 2, d);
dfs(y - 1, x - 1, 5, d);
break;
default:
break;
}
mmap[y][x] = 0;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
mmap[50][50] = true;
dfs(49, 50, 1, 0);
cout << res;
return 0;
}
육각형 우리 속의 개미
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 (언어별 추가 시간 없음) | 1024 MB | 262 | 159 | 90 | 77.586% |
문제
무한히 많은 정육각형이 서로 맞닿아 놓인 형태의 개미 우리가 있다. 다음 그림과 같은 형태이고, 하얀색 변으로만 개미가 다닐 수 있다.
개미 우리의 모습
곤충 관찰이 취미인 유이는 세 정육각형이 서로 맞닿아 있는 어떤 점 위에 개미를 하나 올렸다. 이렇게 우리에 올라온 개미는 그 자신에게 미지의 영역인 우리를 페로몬을 뿌리며 탐색하기 시작했다. 처음 개미는 점과 연결된 세 변 중 하나를 향해 이동을 시작하는데, 편의를 위해 이 첫 번째 이동이 북쪽을 향하도록 돌려서 보자.
만약 개미가 변이 세 갈래로 갈라지는 점에 도착하면, 자신이 이동해온 변을 제외한 나머지 두 변 중 하나를 골라 그 방향으로 회전하여 탐색을 계속한다.
연두색은 시작 지점, 초록색은 개미가 탐색하며 페로몬을 뿌린 경로. 검은색은 개미, 주황색은 다음 이동을 위해 선택 가능한 두 변을 나타낸다.
개미가 이전에 방문했던, 즉, 페로몬이 뿌려진 지점에 도착하면 이곳이 이미 익숙한 영역이라는 착각에 빠지고 더 이상의 탐색을 멈춘다. 이렇게 탐색을 멈췄을 때, 방향을 회전한 횟수가 정확히 N번이 되는 경우의 수를 구해보자.
방향을 7번 회전하는 두 경로. 페로몬의 궤적은 동일해도 개미의 이동 방향에 따라 경로를 구별하도록 한다.
입력
첫 번째 줄에 하나의 정수 N(1 ≤ N ≤ 22)이 주어진다.
출력
첫 번째 줄에 개미가 방향 회전을 N번 하고 멈추는 경우의 수를 출력한다.
예제 입력 1
2
예제 출력 1
0
예제 입력 2
5
예제 출력 2
2
예제 입력 3
8
예제 출력 3
8
출처
Contest > 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 > UCPC 2019 예선 I번
- 문제를 만든 사람: august14