https://www.acmicpc.net/problem/1189
1189번: 컴백홈
첫 줄에 정수 R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)가 공백으로 구분되어 주어진다. 두 번째부터 R+1번째 줄까지는 R×C 맵의 정보를 나타내는 '.'과 'T'로 구성된 길이가 C인 문자열이 주어진다
www.acmicpc.net
#include <bits/stdc++.h>
// [C++] 백준 문제풀이 (BackTracking)
int r, c, k;
std::string map[5];
int ret;
const int dy[] = {0, 0, -1, 1};
const int dx[] = {-1, 1, 0, 0};
bool visit[5][5];
void dfs(int y, int x, int dist){
visit[y][x] = true;
if (y == 0 && x == c - 1){
if (dist == k) ++ret;
return;
}
for (int dir = 0; dir < 4; ++dir){
int ny = y + dy[dir];
int nx = x + dx[dir];
if (ny < 0 || ny >= r || nx < 0 || nx >= c) continue;
if (visit[ny][nx]) continue;
if (map[ny][nx] == 'T') continue;
dfs(ny, nx, dist + 1);
visit[ny][nx] = false;
}
}
int main(int argc, char *argv[])
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> r >> c >> k;
for (int i = 0; i < r; ++i){
std::cin >> map[i];
}
dfs(r - 1, 0, 1);
std::cout << ret << "\n";
return 0;
}
'백준 문제풀이 > Back Tracking' 카테고리의 다른 글
[C++] 백준 문제풀이 (Back Tracking) 1405번 미친 로봇 (0) | 2023.08.01 |
---|---|
[C++] 백준 문제풀이 (Back Tracking) 15658번 연산자 끼워넣기 (2) (0) | 2023.05.31 |
[C++] 백준 문제풀이 (Back Tracking) 2239 스도쿠 (0) | 2023.05.27 |
[C++] 백준 문제풀이 (Back Tracking) 2023번 신기한 소수 (0) | 2023.05.27 |
[C++] 백준 문제풀이 (Back Tracking) 13023번 ABCDE (0) | 2023.05.27 |