蓝桥2021真题:灌溉—>模拟,枚举

文章描述了一个编程问题,涉及C++代码,通过构建邻接矩阵来模拟水管灌溉的过程,记录每一分钟的灌溉状态,以便计算在给定条件下被灌溉的格子总数。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码如下:
‘’‘c++
#include <bits/stdc++.h>
using namespace std;
const int N=150;
int main()
{
int answer=0;
bool original[N][N],after[N][N];//前者用于记录原来的样子,后者记录下一分钟浇灌后的样子
int n,m,r,c,k,t;
cin>>n>>m;
cin>>t;
//输入水管坐标,t个水管->t组坐标
for(int i=1;i<=t;++i)
{
cin>>r>>c;
original[r][c]=1;//有水管的地方就是已经被灌溉 则true
}
cin>>k;
while(k!=0)
{
//(灌溉前与(下一分钟)灌溉后
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
if(original[i][j]==1)
//意思是原来的格子里若已被灌溉
{//那么下一分钟它的四周都将被灌溉,使用after[N][N]表示
//由于后续将用after覆盖original,所以在after在原水管位置也应是被灌溉状态after[i][j]=1
after[i][j]=after[i][j-1]=after[i][j+1]=after[i-1][j]=after[i+1][j]=1;//灌溉了为true
}
}
}
k–;
}
//若不创建after仅在original上灌溉很难保证前一分钟的灌溉情况(哪些是前一分钟的哪些是前两分钟灌溉的)
//题目要求要在前一分钟的基础之上进行灌溉,我们却很难说明哪些是前一分钟的,时间上可能会乱
//而after可将已灌溉的保留下,我们就能明确哪些是第1min的/第2min的/第3min的。。。
//after也会随着original在循环里不断更新变化,最终将after全部复制(包括原水管处)给original即可
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
original[i][j]=after[i][j];
}
//由于after所有格子(被灌溉true)或(未被灌溉)的格子都复制给了original
//遍历original 若被灌溉则计格子数
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
if(original[i][j]==1)
answer++;
}
}
cout<<answer<<endl;
return 0;
}’‘’

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值