-
백준 1937번: 욕심쟁이 판다깊이우선탐색(DFS) 2019. 1. 20. 18:38반응형
https://www.acmicpc.net/problem/1937
1937번: 욕심쟁이 판다
n*n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서 대나무를 먹는다. 그런데 단 조건이 있다. 이 판다는 매우 욕심이 많아서 대나무를 먹고 자리를 옮기면 그 옮긴 지역에 그 전 지역보다 대나무가 많이 있어야 한다. 만약에 그런 지점이 없으면 이 판다는 불만을 가지고 단식 투쟁을 하다가 죽게 된다(-_-) 이
www.acmicpc.net
키워드 - DFS, 구현
Source
#include <iostream> #include <sstream> #include <string> #include <algorithm> #include <functional> #include <vector> #include <list> #include <queue> #include <deque> #include <map> #include <unordered_map> #include <set> #include <stack> #include <cstring> using namespace std; #define MAX_SIZE 100 #define INF 0x7fffffff #define CENDL "\n" #define ll long long int sol = 0; int n; int table[501][501]; int visited[501][501]; int cx[4] = { 0, 0, -1, +1}; int cy[4] = {+1, -1, 0 , 0}; // 상 하좌우 void dfs(int x, int y, int data) { int value = 0; for(int i=0; i<4; i++) { int dx = x + cx[i]; int dy = y + cy[i]; if (dx < 0 || dy < 0 || dx > n || dy > n) { // 이동할 위치가 좌표 보다 크거나 음수인경우 움직이지 않도록 한다. continue; } if(table[x][y] < table[dx][dy]) { if(visited[dx][dy] == 0) dfs(dx, dy, table[dx][dy]); if (value < visited[dx][dy]) value = visited[dx][dy]; } } visited[x][y] = value +=1; if (sol < visited[x][y]) sol = visited[x][y]; } int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { cin >> table[i][j]; } } for(int i=0; i<n; i++) { for (int j=0; j<n; j++) { if(!visited[i][j]) { dfs(i, j,0); } } } cout << sol << CENDL; return 0; }
반응형'깊이우선탐색(DFS)' 카테고리의 다른 글
백준 14716번: 현수막 (0) 2018.08.12 백준 10026번: 적록색약 (0) 2018.07.05 백준 2606번: 바이러스 (0) 2018.07.01 백준 2573번: 빙산 (0) 2018.07.01 백준 10451번: 순열 사이클 (0) 2018.06.24