Acwing2024蓝桥杯FloodFill

AcWing 687. 扫雷

模拟以下样例(10X10):

把扫雷地图转变为数字记录的地图:地雷记作-1,其余表示8个方向有几个地雷,完成后如下图:

接着搜索所有0联通块(为红色矩形),并且把联通块附近不是地雷的点(红色圆形)全标记为-1,如下图:

而答案就是当前该图中大于0的数的数目之和,再加上原来0联通块的数目,dfs(AC):

#include<iostream>
#include<cstring>
using namespace std;
const int N=305;
int T,n;
char a[N][N];   //原地图
int b[N][N];    //数字地图
bool flag[N][N];//标记数组
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
void dfs(int x,int y){if(b[x][y]>0) {b[x][y]=-1;return;}for(int i=0;i<8;i++){int xx=x+dx[i],yy=y+dy[i];if(xx>=1&&xx<=n&&yy>=1&&yy<=n){if(!flag[xx][yy]){flag[xx][yy]=1;if(b[xx][yy]>=0){dfs(xx,yy);}}}}
}
int main(){cin>>T;for(int i=1;i<=T;i++){cin>>n;cout<<"Case #"<<i<<":"<<" ";//地图转换for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) {cin>>a[i][j];if(a[i][j]=='*') b[i][j]=-1;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i][j]=='.'){int t=0;for(int k=0;k<8;k++){int x=i+dx[k],y=j+dy[k];if(x>=1&&x<=n&&y>=1&&y<=n&&a[x][y]=='*'){t++;}}b[i][j]=t;}}}//各变量初始化int ans=0;memset(flag,0,sizeof flag);//搜索0联通块,并且计算联通块数目for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(!flag[i][j]&&b[i][j]==0) {flag[i][j]=1;dfs(i,j);ans++;}//计算剩余大于0数的数目,求得答案for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(b[i][j]>0) ans++;cout<<ans<<endl;}return 0;
}

AcWing 643. 动态网格

模拟+dfs:

#include<iostream>
#include<cstring>
using namespace std;
const int N=105;
int T,R,C,n;
char a[N][N];
bool flag[N][N];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
void dfs(int x,int y){flag[x][y]=1;for(int i=0;i<4;i++){int xx=x+dx[i],yy=y+dy[i];if(xx>=0&&xx<R&&yy>=0&&yy<C){if(a[xx][yy]=='1'&&flag[xx][yy]==0){dfs(xx,yy);}}}return ;
}
int main(){cin>>T;for(int k=1;k<=T;k++){cin>>R>>C;for(int i=0;i<R;i++) for(int j=0;j<C;j++) cin>>a[i][j];cin>>n;cout<<"Case #"<<k<<":"<<endl;while(n--){int ans=0;memset(flag,0,sizeof flag);char ch;cin>>ch;if(ch=='M'){int x,y,z;cin>>x>>y>>z;if(z==1) a[x][y]='1';else a[x][y]='0';}else{for(int i=0;i<R;i++){for(int j=0;j<C;j++){if(a[i][j]=='1'&&flag[i][j]==0){dfs(i,j);ans++;}}}cout<<ans<<endl;}}}return 0;
}

AcWing 844. 走迷宫

bfs: 

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=110;
int n,m;
typedef pair<int,int>pii;
int mapp[N][N],d[N][N];
int bfs(){memset(d,-1,sizeof d);d[1][1]=0;queue<pii>q;q.push({1,1});int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};while(q.size()){auto t=q.front();q.pop();for(int i=0;i<4;i++){int x=t.first+dx[i],y=t.second+dy[i];if(x>=1&&x<=n&&y>=1&&y<=m&&d[x][y]==-1&&mapp[x][y]==0){d[x][y]=d[t.first][t.second]+1;q.push({x,y});}}}return d[n][m];
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>mapp[i][j];cout<<bfs()<<endl;return 0;
}

AcWing 3224. 画图

这题最大的问题就是题目给的坐标不方便,只需要处理好坐标转换,再把两个操作函数写好即可:

#include<iostream>
#include<cstring>
using namespace std;
const int N=105;
int n,m,q;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
char a[N][N];
bool flag[N][N];
//画线函数
void line(int x1,int y1,int x2,int y2){if(x1==x2){//同一行for(int i=y1;i<=y2;i++){if(a[x1][i]=='|'||a[x1][i]=='+') a[x1][i]='+';else a[x1][i]='-';}}if(y1==y2){//同一列for(int i=x1;i<=x2;i++){if(a[i][y1]=='-'||a[i][y1]=='+') a[i][y1]='+';else a[i][y1]='|';}}return ;
}
//填充函数
void fills(int x,int y,char c){flag[x][y]=1;a[x][y]=c;for(int i=0;i<4;i++){int xx=x+dx[i],yy=y+dy[i];if(xx>=0&&xx<n&&yy>=0&&yy<m){if(a[xx][yy]!='-'&&a[xx][yy]!='|'&&a[xx][yy]!='+'){if(flag[xx][yy]==0){fills(xx,yy,c);}}}}return ;
}
int main(){cin>>m>>n>>q;for(int i=0;i<n;i++) for(int j=0;j<m;j++) a[i][j]='.';while(q--){int t;cin>>t;if(t==0){int x1,y1,x2,y2;//x和y反着读入cin>>y1>>x1>>y2>>x2;if(x1>x2) swap(x1,x2);if(y1>y2) swap(y1,y2);line(x1,y1,x2,y2);}else{int x,y;char c;cin>>y>>x>>c;//x和y反着读入memset(flag,0,sizeof flag);fills(x,y,c);}}for(int i=n-1;i>=0;i--){for(int j=0;j<m;j++){cout<<a[i][j];}cout<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《数据结构与算法之美》学习笔记一

前言&#xff1a;今天开始学习极客时间的课程《数据结构与算法之美》。为撒要学习这个&#xff1f;因为做力扣题太费劲了&#xff0c;自己的基础太差了&#xff01;所以要学习学习。开一个系列记录一下学习笔记。认真学吧&#xff0c;学有所获才不负韶华&#xff01;之前就学过…

【算法】滑动窗口——找到字符串中所有字母异位词

本节博客是对题目——找到字符串中所有字母异位词的从读题到代码实现以及优化的详细解读&#xff0c;有需要借鉴即可。 目录 1.题目2.滑动窗口 哈希数组3.异位词优化4.总结 1.题目 题目链接&#xff1a;LINK 首先来解释一下什么是异位词&#xff0c;所谓“异位词”&#xf…

show profile

功能 当你执行一个复杂的 SQL 查询时&#xff0c;这个命令可以帮助你了解查询的各个部分花费了多少时间&#xff0c;从而找到可能的性能瓶颈。默认情况下&#xff0c;参数处于关闭状态&#xff0c;并保存最近15次的运行结果 开启 查看是否支持 SHOW VARIABLES LIKE profili…

【XR806开发板试用】试用SWD+Jlink调试

XR806开发板&#xff0c;只能使用编写代码&#xff0c;然后通过UART下载&#xff0c;没法在线debug&#xff0c; 效率会差很多&#xff0c;官方没有提供这一方面的资料。 先查CPU&#xff0c; 官方介绍是arm-china的MC1&#xff0c;通过armv8 Architecture refenence manual资料…

跨境电商行业蓬勃发展,武汉星起航引领卖家孵化新潮流

近年来&#xff0c;我国跨境电商行业在政府的大力扶持下呈现出强劲的发展势头。随着国内制造业结构的加速调整与居民消费需求升级态势的持续凸显&#xff0c;跨境出口规模占比稳步提升&#xff0c;跨境进口规模同样不断扩大&#xff0c;行业市场规模持续增长。在这一背景下&…

QT学习(4)——自定义控件

目录 引出自定义一个控件自定义控件定义方法函数widget窗口调用函数 总结 引出 QT学习&#xff08;4&#xff09;——自定义控件 自定义一个控件 自定义控件定义方法函数 #include "smallwid.h" #include "ui_smallwid.h"SmallWid::SmallWid(QWidget *par…

redis抖动问题导致延迟或者断开的处理方案

目录&#xff1a; 1、使用背景2、redis重试机制3、redis重连机制4、其他一些解决redis抖动问题方案 1、使用背景 客户反馈文件偶现打不开&#xff0c;报错现象是session not exist&#xff0c;最终定位是redis抖动导致的延迟/断开的现象&#xff0c;最终研发团方案是加入redis…

Mapreduce | 案例

根据提供的数据文件【test.log】 数据文件格式&#xff1a;姓名,语文成绩,数学成绩,英语成绩 完成如下2个案例&#xff1a; &#xff08;1&#xff09;求每个学科的平均成绩 &#xff08;2&#xff09;将三门课程中任意一门不及格的学生过滤出来 &#xff08;1&#xff09;求每…

Navicat安装配置(注册码)连接MySQL

下载资源 博主给你打包好了安装包&#xff0c;在网盘里&#xff0c;防止你下载到钓鱼软件 快说谢谢博主&#xff08;然后心甘情愿的点个赞~&#x1f60a;&#xff09; navicatformysql.zip_免费高速下载|百度网盘-分享无限制 (baidu.com) 安装流程 ①下载好压缩包后并解压 ② …

【JavaEE精炼宝库】多线程1(认识线程 | 创建线程 | Thread 类)

目录 一、认识线程 1.1 线程的概念&#xff1a; 1.2 为什么需要线程&#xff1a; 1.3 面试题.谈谈进程和线程的区别&#xff1a; 1.4 Java的线程和操作系统线程的关系&#xff1a; 二、创建线程 2.1 创建线程的5种写法&#xff1a; 2.1.1 写法1.继承 Thread 类&#xf…

【redis】Redis五种常用数据类型和内部编码,以及对String字符串类型的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

C++ | Leetcode C++题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int n nums.size();if (n < 2) {return n;}int slow 2, fast 2;while (fast < n) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slo…

【doghead】mac与wsl2联通

mbp 设置为发送端,那么要能与windows上 wsl2的ubutnu通信。 mbp的 uv 构建ok zhangbin@zhangbin-mbp-2  ~/tet/Fargo/zhb-bifrost/Bifrost-202403/worker/third_party/libuv   main clion使用lldb cmake构建 更新git2.45.0啊

盘点自动驾驶的技术发展趋势

自动驾驶技术在不断发展变快&#xff0c;我们之前提过算法岗如今越来越卷&#xff0c;从今年的就业局势看&#xff0c;前年还属于蓝海行业的自动驾驶&#xff0c;今年就已经满满关上了招揽之门——呈红海之势。作为在这个行业中摸爬滚打的一以子&#xff0c;我们到底该如何纵观…

会员卡积分收银源码系统 支持多门店系统 带完整的安装代码包以及安装搭建教程

在数字化浪潮的推动下&#xff0c;传统零售行业面临着巨大的转型压力。为了满足现代消费者多样化的需求&#xff0c;提高门店管理效率和顾客满意度&#xff0c;小编给大家分享一款会员卡积分收银源码系统——支持多门店系统&#xff0c;并附带了完整的安装代码包以及安装搭建教…

君正T31移植电源IC—CW2015芯片简介

CW2015芯片简介 CW2015 是一款超紧凑、低成本、主机侧/电池组侧、无传感电阻器的电量计量系统 IC&#xff0c;适用于手持和便携式设备中的锂离子 (Li) 电池。CW2015 包括一个14 位Sigma-Delta ADC、一个精密电压基准和内置准确温度传感器。该 IC 允许最终用户消除占用大量电路板…

【Vue3进阶】- Pinia

什么是Pinia Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。它提供了类似于 Vuex 的功能&#xff0c;但比 Vuex 更加简单和直观。 需要在多个组件之间共享状态或数据时使用 Pinia 的 store&#xff0c;这样可以避免 props 和 eventBus 等传统方法…

【stm32笔记】DSP库调用

参考&#xff1a;DSP库调用 , __CC_ARM,__TARGET_FPU_VFP, __FPU_PRESENT1U, ARM_MATH_CM4 ,USE_HAL_DRIVER,STM32F407xx,ARM_MATH_CM4,__FPU_USED1U,__FPU_PRESENT1U,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING把需要的库复制出来单独用&#xff0c;方便移植

KEIL declaration may not appear after executable statement in block

KEIL declaration may not appear after executable statement in block 这个问题也是比较经典&#xff0c;就是不允许你的变量定义位置不允许在下边的代码区域&#xff0c;只允许在最上方 ‍ 修改编码模式为C99解决 ‍ ​​

(Java)心得:LeetCode——15.三数之和

一、原题 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。…