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

2.14寒假

这几天复习的搜索把之前做过的题目看了一下。

解析:int dx[5]={0,0,1,0,-1}; 和 int dy[5]={0,1,0,-1,0};:这两个数组用于表示上下左右四个方向的偏移量,方便在 DFS 中访问相邻的元素。o 和 p 分别表示当前搜索位置的行和列。边界条件判断:如果当前位置超出矩阵范围(o<0||o>n+1||p<0||p>n+1)或者当前位置的值不为 0,则直接返回。标记当前位置:将当前位置的值标记为 1,表示该位置已经被访问过。递归搜索相邻位置:通过 dx 和 dy 数组遍历当前位置的上下左右四个相邻位置,并递归调用 dfs 函数进行搜索。首先读取矩阵的大小 n,然后使用双重循环读取 n x n 的矩阵元素,并将其存储在数组 a 中,同时将 a 中的元素复制到数组 b 中。从边界开始进行深度优先搜索:分别从矩阵的上下左右边界开始调用 dfs 函数进行搜索,将与边界相连的所有 0 标记为 1。替换未标记的 0:遍历数组 a,如果某个位置的值仍然为 0,说明该位置被 1 完全包围,将数组 b 中对应位置的值替换为 2。
输出结果:使用双重循环遍历数组 b,并输出处理后的矩阵。

#include<stdio.h>
int a[30][30],b[30][30];
int dx[5]={0,0,1,0,-1};
int dy[5]={0,1,0,-1,0};
int n;
void dfs(int o,int p)
{int i;if(o<0||o>n+1||p<0||p>n+1||a[o][p]!=0){return;}a[o][p]=1;for(i=1;i<=4;i++){dfs(o+dx[i],p+dy[i]);}
}int main()
{int i,j;scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);b[i][j]=a[i][j];}}for(i=0;i<n;i++)dfs(0,i);for(i=0;i<n;i++)dfs(n-1,i);for(i=0;i<n;i++)dfs(i,0);for(i=0;i<n;i++)dfs(i,n-1);for(i=0;i<n;i++){for(j=0;j<n;j++){if(a[i][j]==0)b[i][j]=2;}}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%d ",b[i][j]);printf("\n");}return 0;
}

解析:使用双重循环遍历整个二维网格。当遇到字符不为 '0' 的位置时,调用 dfs 函数进行深度优先搜索,将该连通区域的所有 '1' 标记为 '0'。每完成一次 dfs 搜索,就意味着找到了一个新的连通区域,count 加 1。

#include<stdio.h>
int n,m,count=0;
char a[101][101];
int dx[5]={0,0,1,0,-1};
int dy[5]={0,1,0,-1,0};void dfs(int x,int y)
{int i;if(x<1||x>n||y<1||y>m||a[x][y]=='0')return;a[x][y]='0';for(i=1;i<=4;i++){dfs(x+dx[i],y+dy[i]);}
}int main() 
{int i,j;scanf("%d %d",&n,&m);for(i=1; i<=n; i++) {for(j=1; j<=m; j++) {scanf(" %c",&a[i][j]);}}for(i=1; i<=n; i++) {for(j=1; j<=m; j++) {if(a[i][j]!='0'){dfs(i,j);count++;}}}printf("%d",count);return 0;
}

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

相关文章:

  • 基于逻辑概率的语义信道容量(Semantic Channel Capacity)和语义压缩理论(Semantic Compression Theory)
  • DeepSeek R1本地部署教程
  • CEF132编译指南 MacOS 篇 - 获取 CEF 源码 (五)
  • TypeScript装饰器 ------- 学习笔记分享
  • FPGA实现UltraScale GTH光口视频转USB3.0传输,基于FT601+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
  • 蓝桥杯篇---实时时钟 DS1302
  • C语言蓝桥杯1003: [编程入门]密码破译
  • 【MySQL在Centos 7环境安装】
  • 科技引领未来,中建海龙C-MiC 2.0技术树立模块化建筑新标杆
  • 玩转观察者模式
  • Baklib知识中台构建企业智能运营核心架构
  • Anaconda +Jupyter Notebook安装(2025最新版)
  • 正成为现代城市发展的必然趋势的智慧交通开源了
  • 手撕Transformer编码器:从Self-Attention到Positional Encoding的PyTorch逐行实现
  • Webpack和Vite插件的开发与使用
  • HTTP的状态码
  • Python函数-装饰器
  • 【数据可视化-17】基于pyecharts的印度犯罪数据可视化分析
  • HTTP请求报文头和相应报文头
  • 19.4.9 数据库方式操作Excel
  • BFS 走迷宫
  • 【Linux系统】—— 简易进度条的实现
  • Qt 中使用 SQLite 数据库的完整指南
  • 数智化时代的工单管理:从流程驱动到数据驱动-亿发
  • Large Language Model Distilling Medication Recommendation Model
  • floodfill算法系列一>被围绕的区域
  • Redis 01 02章——入门概述与安装配置
  • windows基于cpu安装pytorch运行faster-whisper-large-v3实现语音转文字
  • AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率
  • 【Prometheus】prometheus黑盒监控balckbox全面解析与应用实战