当前位置: 首页 > 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;
}

相关文章:

  • Baklib知识中台构建企业智能运营核心架构
  • 基于 openEuler 构建 LVS-DR 群集
  • 《玩转AI大模型:从入门到创新实践》(9)第七章 AI职业地图:从使用者到创造者
  • k8s集群搭建参考(by lqw)
  • DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件
  • 给你一个三维numpy,形状为n*120*140,这里n<30,在其第一位维度n上扩展,将其扩展到30,扩展的部分全部设置为零
  • LLM:BERT or BART 之BART
  • 机器学习之AAE(Adversarial Autoencoder,对抗自编码器)生成数据样本
  • Jenkins项目CICD流程
  • Git GUI设置中文的方法及使用
  • 解决DeepSeek服务器繁忙问题
  • c++TinML转html
  • 深度学习框架探秘|PyTorch:AI 开发的灵动画笔
  • 国产化替代大势所趋,ARM工控机的未来之路
  • 疯狂前端面试题(二)
  • MongoDB进阶篇-索引
  • 基于YoloV11+PaddleOCR的车牌检测系统
  • STM32硬件SPI函数解析与示例
  • 蓝桥杯之KMP算法
  • 【Linux】环境变量
  • 在闲鱼可以做网站吗/学大教育一对一收费价格表
  • 网站开发是做什么的/关键词排名优化
  • 产品设计网站官网/小红书推广平台
  • 南宁营销网站建设/山东16市最新疫情
  • 网站建设公司公司/自创网站
  • 网站常用的推广方法有哪些/百度一下就会知道了