样例">输入输出样例
示例 1
输入
3 6
2
2 2
3 4
1
输出
9
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
一道搜索的题目:
这里选择用限定步数的dfs来做,在过程中维护一个访问数组water[N][N]和步数即可,每经过一个新的点都递增可灌溉的数目。
代码如下所示:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
vector<PII> v;
int n,m,t,k;
int ans=0;
const int N=105;
int water[N][N];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
void dfs(int x,int y,int s)
{
if(s>k||x<1||x>n||y<0||y>m||water[x][y]==1) return;
water[x][y]=1;
ans++;
for(int i=0;i<4;++i)
{
int nx=x+dx[i];
int ny=y+dy[i];
dfs(nx,ny,s+1);
}
}
int main()
{
// 请在此输入您的代码
cin>>n>>m>>t;
memset(water,0,sizeof(water));
for(int i=0;i<t;++i)
{
int r,c;
cin>>r>>c;
v.push_back({r,c});
}
cin>>k;
for(int i=0;i<v.size();++i)
{
dfs(v[i].first,v[i].second,0);
}
cout<<ans;
return 0;
}