제출 #1133853

#제출 시각아이디문제언어결과실행 시간메모리
1133853sidripperTracks in the Snow (BOI13_tracks)C++20
0 / 100
1 ms324 KiB
#include <bits/stdc++.h>

using namespace std;


void dfs(int row, int col, int H, int W, vector<vector<char>>* grid, set<pair<int, int>>* 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, H, W, grid, visited, rabbit, fox);
	dfs(row-1, col, H, W, grid, visited, rabbit, fox);
	dfs(row, col+1, H, W, grid, visited, rabbit, fox);
	dfs(row, col-1, H, W, grid, visited, rabbit, fox);

}

int main () {


	int H, W;
	cin >> H >> W;
	vector< vector<char> > grid;
	char 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;
	

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...