2026/4/14 18:46:00
网站建设
项目流程
网站制作公司 信科网络,江门做网站的公司,账号权重查询入口站长工具,样asp.net做网站欢迎大家订阅我的专栏#xff1a;算法题解#xff1a;C与Python实现#xff01; 本专栏旨在帮助大家从基础到进阶 #xff0c;逐步提升编程能力#xff0c;助力信息学竞赛备战#xff01;
专栏特色 1.经典算法练习#xff1a;根据信息学竞赛大纲#xff0c;精心挑选…欢迎大家订阅我的专栏算法题解C与Python实现本专栏旨在帮助大家从基础到进阶 逐步提升编程能力助力信息学竞赛备战专栏特色1.经典算法练习根据信息学竞赛大纲精心挑选经典算法题目提供清晰的代码实现与详细指导帮助您夯实算法基础。2.系统化学习路径按照算法类别和难度分级从基础到进阶循序渐进帮助您全面提升编程能力与算法思维。适合人群准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生希望系统学习C/Python编程的初学者想要提升算法与编程能力的编程爱好者附上汇总帖GESP认证C编程真题解析 | 汇总【题目来源】洛谷B4263 [GESP202503 四级] 荒地开垦 - 洛谷【题目描述】小杨有一大片荒地可以表示为一个n nn行m mm列的网格图。小杨想要开垦这块荒地但荒地中一些位置存在杂物对于一块不存在杂物的荒地该荒地可以开垦当且仅当其上下左右四个方向相邻的格子均不存在杂物。小杨可以选择至多一个位置清除该位置的杂物移除杂物后该位置变为荒地。小杨想知道在清除至多一个位置的杂物的情况下最多能够开垦多少块荒地。【输入】第一行包含两个正整数n , m n,mn,m含义如题面所示。之后n nn行每行包含一个长度为m mm且仅包含字符.和#的字符串。如果为.代表该位置为荒地如果为#代表该位置为杂物。【输出】输出一个整数代表在清除至多一个位置的杂物的情况下最多能够开垦的荒地块数。【输入样例】3 5 ..... .#..# .....【输出样例】11【算法标签】《洛谷 B4263 荒地开垦》 #模拟# #枚举# #GESP# #2025#【代码详解】#includebits/stdc.husingnamespacestd;// 定义常量N为地图最大尺寸constintN1005;// 定义变量n行数m列数ans初始答案intn,m,ans;// 定义二维数组存储地图1表示障碍物0表示空地inta[N][N];// 定义四个方向的偏移量上、右、下、左intdx[4]{-1,0,1,0},dy[4]{0,1,0,-1};// 检查(x,y)位置四周是否有障碍物boolcheck(intx,inty){for(inti0;i4;i)// 遍历四个方向{intnxxdx[i],nyydy[i];// 计算相邻位置坐标// 如果相邻位置超出边界则跳过if(nx1||nxn||ny1||nym)continue;// 如果相邻位置有障碍物则返回falseif(a[nx][ny]1)returnfalse;}// 四周都没有障碍物则返回truereturntrue;}intmain(){// 输入地图尺寸n行m列cinnm;// 读入地图数据for(inti1;in;i)for(intj1;jm;j){charc;cinc;// 将#转换为1表示障碍物其他为0表示空地if(c#)a[i][j]1;}// 计算初始状态下满足条件的空地数量for(inti1;in;i)for(intj1;jm;j)// 如果是空地且四周没有障碍物if(a[i][j]0check(i,j))ans;// 计数增加intres0;// 记录最多能新增的满足条件的位置数// 尝试移除每个障碍物计算能新增多少满足条件的位置for(inti1;in;i)for(intj1;jm;j){intcnt0;// 记录当前障碍物移除后的新增数量if(a[i][j]1)// 如果是障碍物{a[i][j]0;// 临时移除障碍物// 检查这个位置本身是否满足条件if(check(i,j))cnt;// 检查这个位置四周的空地是否满足条件for(intk0;k4;k){intnxidx[k],nyjdy[k];// 跳过超出边界的位置if(nx1||nxn||ny1||nym)continue;// 如果是空地且满足条件if(a[nx][ny]0check(nx,ny))cnt;}a[i][j]1;// 恢复障碍物}resmax(res,cnt);// 更新最大值}// 输出初始满足条件的位置数加上最多能新增的数量coutansresendl;return0;}【运行结果】3 5 ..... .#..# ..... 11