백준
백준 소스코드 [C++] 14503 로봇 청소기
Hani_Levenshtein
2021. 2. 1. 20:02
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어
www.acmicpc.net
백준 소스코드 [C++] 14503 로봇 청소기
#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
typedef long long ll;
using namespace std;
int wall[52][52];
bool chk[52][52];
int n, m, sum = 0;
int dx[4] = { 0,1,0,-1 };
int dy[4] = { -1,0,1,0 };
void dfs(int y,int x,int dir,bool clean) {
if (clean == true) {
sum++;
chk[y][x] = true;
}
for (int i = 1;i <= 4;i++) {
int idx = (dir - i);
if (idx < 0) idx = idx + 4;
if (wall[y + dy[idx]][x + dx[idx]] == 0 && chk[y + dy[idx]][x + dx[idx]] == false) {
dfs(y + dy[idx], x + dx[idx], idx,true);
return;
}
}
int idx = (dir - 2);
if (idx < 0) idx = idx + 4;
if (wall[y + dy[idx]][x + dx[idx]] == 0) {
dfs(y + dy[idx], x + dx[idx], dir, false);
return;
}
else return;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
int y, x, dir;
cin >> y >> x >> dir;
for (int i = 0;i <= 51;i++)
for (int j = 0;j <= 51;j++)
wall[i][j] = 1;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
cin >> wall[i][j];
dfs(y+1, x+1, dir,true);
cout << sum;
return 0;
}