-
[BOJ]백준 22116번: 창영이와 퇴근(C++)/Binary Search, DFSProblem Solving/BOJ(백준) 2021. 8. 15. 21:35
https://www.acmicpc.net/problem/22116
이분탐색 + DFS로 풀거나 다익스트라로 풀 수 있는 문제
나는 다익스트라로 풀다가 계속 맞왜틀 발생해서 그냥 이분탐색 + DFS로 풀었당 ㅎㅎ
#include <cstdio> #include <vector> #include <math.h> #include <cstring> #define ll long long using namespace std; int map[1001][1001], dx[] = { 1,0,-1,0 }, dy[] = { 0,1,0,-1 }, n; bool visit[1001][1001]; bool safe(int x, int y) { return x >= 0 && x < n&& y >= 0 && y < n; } bool dfs(int x, int y, int l) { if (x == n - 1 && y == n - 1)return true; visit[y][x] = true; bool flag = false; for (int i = 0; i < 4; i++) { int nx = x + dx[i], ny = y + dy[i]; if (safe(nx, ny) && !visit[ny][nx] && (abs(map[ny][nx] - map[y][x]) <= l)) { flag |= dfs(nx, ny, l); } } return flag; } int main() { scanf("%d", &n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { scanf("%d", &map[i][j]); } ll left = -1, right = 1000000000; while (left + 1 < right) { ll mid = (left + right) / 2; if (dfs(0, 0, mid)) { right = mid; } else { left = mid; } memset(visit, false, sizeof visit); } printf("%lld", right); return 0; }
'Problem Solving > BOJ(백준)' 카테고리의 다른 글
[BOJ]백준 2917번: 늑대 사냥꾼(C++)/Dijkstra (349) 2021.08.16 [BOJ]백준 22234번: 가희와 은행(C++)/Priority Queue (1) 2021.08.15 [BOJ]백준 1495번: 기타리스트(C++)/DP (175) 2021.08.15 [BOJ]백준 20160번: 야쿠르트 아줌마 야쿠르트 주세요(C++)/Dijkstra (0) 2021.08.09 [BOJ]백준 22114번: 창영이와 점프(C++)/DP (421) 2021.08.08