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;
}