https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

쉽당~

#include <iostream>
#include <vector>
#include <algorithm>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<bitset>
#include<cmath>
using namespace std;

void Prints(vector<vector<char>>maps, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cout << maps[i][j] << ",";
		}
		cout << endl;
	}
	cout << endl;
}
void Prints(vector<vector<bool>>maps, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cout << maps[i][j] << ",";
		}
		cout << endl;
	}
	cout << endl;
}
void Prints(vector<vector<int>>maps, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cout << maps[i][j] << ",";
		}
		cout << endl;
	}
	cout << endl;
}
struct Point {
	int i;
	int j;
	int cnt = 0;
};
struct Data {
	int index;
	int cnt = 0;
	int gc = 1;

};

int main() {
	int T;
	cin >> T;
	vector<int>gCount;
	for (int z = 0; z < T; z++) {
		int m, n;
		cin >> m >> n;
		int k;
		int count = 0;
		cin >> k;
		vector<int>tmpMaps(m, 0);
		vector<vector<int>>maps(n, tmpMaps);

		vector<bool>tmpBvisited(m, false);
		
		vector<vector<bool>>bVisitied(n, tmpBvisited);
		for (int i = 0; i < k; i++) {
			int u, v;
			cin >> u >> v;
			maps[v][u]=1;
			bVisitied[v][u] = true;
		}
		//Prints(maps, n, m);
		//Prints(bVisitied, n, m);
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				
				if (maps[i][j] == 1&&bVisitied[i][j]==true) {
					//Prints(maps, n, m);
					queue<Point>q;
					Point p;
					p.i = i;
					p.j = j;
					int diri[] = { 1,-1,0,0 };
					int dirj[] = { 0,0,1,-1 };
					bVisitied[i][j] = false;
					q.push(p);
					count++;

					//Prints(bVisitied, n, m);
					while (!q.empty()) {
						Point start =q.front();
						q.pop();
						
						for (int v = 0; v < 4; v++) {
							int tmpDIrI = start.i+ diri[v];
							int tmpDIrR = start.j + dirj[v];
							if (tmpDIrI == -1 || tmpDIrR == -1 || tmpDIrI >= n || tmpDIrR >= m) {
								continue;
							}
							if (bVisitied[tmpDIrI][tmpDIrR] == true && maps[tmpDIrI][tmpDIrR] == 1) {
								Point tmpP;
								tmpP.i = tmpDIrI;
								tmpP.j = tmpDIrR;
								bVisitied[tmpDIrI][tmpDIrR] = false;
								q.push(tmpP);
							//	Prints(bVisitied, n, m);
							}
							

						}
					}

				}
			}
		}
		//cout << count <<endl;
		gCount.push_back(count);
	}
	for (int i = 0; i < gCount.size(); i++) {
		cout << gCount[i] << endl;
	}
	
	return 0;
}

'알고리즘 공부' 카테고리의 다른 글

백준 음식물 피하기  (0) 2023.07.16
백준 경로찾기  (0) 2023.07.16
백준 나이트 이동  (0) 2023.07.15
백준 영역 구하기  (0) 2023.07.15
백준 바이러스  (0) 2023.07.15

+ Recent posts