Есть поле с растениями - сетка из N строк (пронумерованных от 1 до N) и M столбцов (пронумерованных от 1 до M);из его ЯМ-клеток К-клетки содержат растения, а остальные содержат сорняки.За пределами этой сетки везде есть сорняки.Две ячейки являются смежными, если они имеют общую сторону.
Вы хотите построить заборы в поле таким образом, чтобы для каждой ячейки, содержащей растение, выполнялись следующие условия:
этоможно перейти из этой клетки в каждую соседнюю клетку, содержащую растение, не пересекая заборов, невозможно перейти из этой клетки в любую клетку, содержащую сорняки, не пересекая заборов
Ввод:
ПервыйСтрока ввода содержит одно целое число T, обозначающее количество тестовых случаев.Описание Т-тестов приведено ниже.Первая строка каждого теста содержит три разделенных пробелом целых числа N, M и K. За ними следуют K строк.Каждая из этих строк содержит два разделенных пробелом целых числа r и c, обозначающих, что ячейка в строке r и столбце c содержит растение.
#include <iostream>
#include<vector>
#include<queue>
using namespace std;
int main() {
// your code goes here
int t,n,m,i,j,k,flag=0;
int r[4] = {-1,1,0,0};
int c[4] = {0,0,-1,1};
cin>>t;
while(t--) {
int ans=0;
cin>>n>>m>>k;
vector < vector<int> > vec(n, vector<int>(m,0));
/* for(int z=0; z<k; z++) {
cin>>i>>j;
vec[i-1][j-1] = 1;
} */
queue<pair<int,int>> q;
for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
if(vec[i][j] == 1) {
q.push(make_pair(i,j));
flag = 1;
break;
}
}
if(flag==1)
break;
}
while(!q.empty()) {
pair<int,int> p = q.front();
int a = p.first;
int b = p.second;
int x=0;
q.pop();
for(i=0;i<4;i++) {
for(j=0;j<4;j++) {
int rr = a + r[i];
int cc = b + c[j];
if(rr<0 || cc<0 || rr>=n || cc>=m || vec[rr][cc]==0)
continue;
else {
q.push(make_pair(rr,cc));
x++;
}
}
}
ans = ans + (4-x);
}
cout<<ans<<endl;
}
return 0;
}
Если я удаляю комментарии выше, это показывает ошибку тайм-аута.Я не могу обнаружить проблему с помощью приведенного выше утверждения.