# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1133846 | sidripper | Tracks in the Snow (BOI13_tracks) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
void dfs(int row, int col, int H, int W, vector<vector<int>>* grid, set* visited, int* rabbit, int* fox) {
if (row < 0 || col < 0 || col >= W || row >= H || grid[row][col] == '.' || *visited.find({row, col}) != visited.end()) {
return;
}
*visited.insert({row, col})
if (grid[row][col] == 'R') {
*rabbit = 1;
}
if (grid[row][col] == 'F') {
*fox = 1;
}
dfs(row+1, col);
dfs(row-1, col);
dfs(row, col+1);
dfs(row, col-1);
}
int main () {
int H, W;
cin >> H >> W;
vector< vector<int> > grid;
int val;
for (int i=0; i<H; i++) {
for (int j=0; j<W; j++) {
cin >> val;
grid[i].push_back(val);
}
}
set<pair<int, int>> visited;
int ans = 0;
for (int row=0; row<H; row++) {
for (int col=0; col<W; col++) {
if (grid[row][col] == '.' || visited.find({row, col}) != visited.end()) {
continue;
}
int rabbit = 0;
int fox = 0;
dfs(row, col, H, W, &grid, &visited, &rabbit, &fox);
ans += rabbit;
ans += fox;
}
}
cout << ans;
}