当前位置: 首页 > news >正文

【蓝桥杯每日一题】填充颜色超详细解释!!!

       为了让蓝桥杯不变成蓝桥悲,我决定在舒适的周日再来一道题。

例: 

输入:

6
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1

输出:

0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1

 答案思路

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
//跑一遍洪水灌溉
const int N=35;
typedef pair<int,int> PII;int n;
int g[N][N];
bool st[N][N];
queue<PII> q;int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};void bfs(int x1,int y1)
{q.push({x1,y1});//q[0]={x1,y1};st[x1][y1]=true;//int hh=0,tt=0;while(!q.empty()){PII t=q.front();//取出队头q.pop();for(int i=0;i<4;i++){int a=t.first+dx[i];int b=t.second+dy[i];if(g[a][b]==1) continue;if(a<0||a>n+1||b<0||b>n+1) continue;if(st[a][b]) continue;st[a][b]=true;q.push({a,b});//q[++tt]={a,b};//队尾后加 //if(dist[a][b]>=0) continue;} }return ;
}int main()
{scanf("%d",&n);memset(g,0,sizeof g);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&g[i][j]);}}bfs(0,0);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(g[i][j]==0 && !st[i][j]){g[i][j]=2;}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%d ",g[i][j]);}printf ("\n");}return 0;
}

ai解析果然好用~

代码使用了 std::queue 来实现广度优先搜索(BFS)的队列操作。

std::queue 是一个容器适配器,它提供了一个先进先出(FIFO)的数据结构,非常适合用于实现广度优先搜索算法。

现在,你的代码能够正确地从点 (0, 0) 开始,通过 BFS 遍历与起始点相连的所有值为 1 的位置,并将这些位置标记为已访问。之后,它会遍历整个网格,将未被访问且值为 0 的位置标记为 2。

这里是你修改后的代码的简要解释:

  1. queue<PII> q;:定义了一个 PII 类型的队列 q,用于存储待访问的坐标对。

  2. bfs(int x1, int y1) 函数:

    • 使用 q.push({x1, y1}); 将起始坐标 (x1, y1) 加入队列。
    • while(!q.empty()) 循环,当队列不为空时,继续处理队列中的元素。
    • PII t = q.front(); 取出队头元素。
    • q.pop(); 弹出队头元素。
    • 遍历四个方向,检查相邻位置是否满足条件(值为 1,且在网格内,且未被访问过)。
    • 如果满足条件,将相邻位置标记为已访问,并加入队列。
  3. main 函数:

    • 读取网格大小和值。
    • 调用 bfs(0, 0); 从 (0, 0) 开始进行 BFS。
    • 遍历网格,将未被访问且值为 0 的位置标记为 2。
    • 输出修改后的网格。

这段代码现在应该可以正确地执行洪水灌溉算法了。请确保输入数据是有效的,并且网格的大小不超过你定义的 N 常量(在这个例子中是 35)。

http://www.lryc.cn/news/320209.html

相关文章:

  • VSCODE的常用插件
  • Oracle常用DBA相关语句
  • JavaScript 入门指南(一)简介及基础语法
  • UbuntuServer22.04配置静态IP地址
  • vue3 打印局部网页、网页下载为图片、下载为pdf-自动分页,几行代码搞定
  • 力扣hot100:34. 在排序数组中查找元素的第一个和最后一个位置(二分查找的理解)
  • 几何相互作用GNN预测3D-PLA
  • 2024最新版使用PyCharm搭建Anaconda
  • 前台于后台项目
  • Magical Combat VFX
  • hadoop伪分布式环境搭建详解
  • day12-SpringBootWeb 登录认证
  • 内外网数据单向导入导出 如何提升效率确保安全性?
  • Spring核心方法:Refresh全解(WebMVC如何装配、关联)
  • TCP:三次握手四次挥手及相关问题:
  • 链式二叉树--前序中序后序遍历,高度,节点个数问题
  • HCIA——TCP协议详解
  • Hadoop大数据应用:Linux 部署 HDFS 分布式集群
  • 纯 CSS 实现文字换行环绕效果
  • 【爬虫逆向】Python逆向采集猫眼电影票房数据
  • 解析服务器下载速度:上行、下行与带宽之谜
  • 计算机网络的概念
  • MATLAB中的脚本和函数有什么区别?
  • 从电影《沙丘》说起——对人工智能的思考
  • 使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】
  • 学习笔记--在线强化学习与离线强化学习的异同(3)
  • 使用Thymeleaf导出PDF,页眉插入图片与内容重叠?
  • python网络编程:通过socket实现TCP客户端和服务端
  • 论文阅读——RSGPT
  • 长连接技术