Search
Duplicate

침투

주차
0
문제번호
13565
언어
C++
티어
실버
유형
그래프
DFS
nj_Blog
nj_상태
이해도
풀이
사람
이해도 2
13 more properties

Memo

위쪽 부터 침투를 시작하므로 처음 시작 점은 0,0 부터 0, M - 1 까지 입니다.
좌표가 N 이 넘어가게 되면 전류가 안쪽까지 침투된 것이므로, 그것에 맞게 output을 처리 후 프로그램을 종료합니다.

Code

제출 날짜

@4/1/2021

메모리

4280 KB

시간

4 ms
#include <iostream> int N, M; bool g_map[1001][1001]; bool visited[1001][1001]; int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; int ans; void input_faster() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { std::string a; input_faster(); std::cin >> M >> N; for (int i = 0 ; i < M ; i++) { std::cin >> a; for (int j = 0; j < a.size() ; j++) g_map[i][j] = (int)a[j] - '0'; } } bool dfs(int y, int x) { int ny, nx; for (int i = 0 ; i < 4 ; i++) { ny = y + dy[i]; nx = x + dx[i]; if (ny >= M) return (1); if (ny < 0 || nx < 0 || nx >= N || visited[ny][nx] || g_map[ny][nx]) continue; visited[ny][nx] = 1; if(dfs(ny, nx)) return (1); } return (0); } void solve() { for (int i = 0 ; i < N ; i++) { if (visited[0][i] || g_map[0][i]) continue; visited[0][i] = 1; if(dfs(0, i)) { ans = 1; return ; } } } void print_val() { if (ans) std::cout << "YES"; else std::cout << "NO"; } int main() { input(); solve(); print_val(); return (0); }
C++
복사