二维数组八个方向的判断--牛客刷题1023-病菌感染

news2025/1/18 16:54:52

铁子和顺溜上生物课的时候不小心将几滴超级病菌滴到了培养皿上,这可急坏了他们。
培养皿可以被看成一个n*n的方格,最初病菌滴在了这n*n的格子中的某些格子,病菌的传染方式是这样的,如果一个方格与两个或多个被感染的方格相邻(两个方格相邻当且仅当它们只有一条公共边),那么它就会被感染。现在铁子和顺溜想知道,最终所有的方格会不会都被感染。

输入描述:

第一行两个整数n,m。n表示方格的规格,m表示最初病菌所在的格子数。(1 ≤ n ≤ 1000, 0 < m < n)。

接下来m行每行两个整数xi,yi表示第xi行的第yi个格子有病菌。

数据保证不会有两个病菌初始时在同一个格子。

输出描述:

如果最终所有的方格都会被感染,输出 YES。
否则输出 NO。

示例1

输入

3 2
1 2
2 2

输出

NO

我们先去分析题的大意

  • 一个n*n的方格  :明显是个矩阵----> 要用到二维数组了
  • ,如果一个方格与两个或多个被感染的方格相邻(两个方格相邻当且仅当它们只有一条公共边),那么它就会被感染。现在铁子和顺溜想知道,最终所有的方格会不会都被感染
  • 这个说明的是病毒是在四个方向上进行的,上 下 左 右:
  • 接下来m行每行两个整数xi,yi表示第xi行的第yi个格子有病菌。
  • 数据保证不会有两个病菌初始时在同一个格子。 --------->是说输入坐标

其实说到这里,大致是有自己的方向来判断了,就是在上下左右四个方向上来判断呗,为了便于理解,我按照题意打印出如下图形,0(病毒),那么我就开始去走起

 这个是便于理解,但是在做题的时候,为了方便,我直接把所有的元素变成了0,那么是病毒是则是1,然后我在遍历中走一圈的时候,可以来进行加法,当大于2时,就说明你的周围是最少有三个病毒,然后就被感染,然后在遍历走去

while (m > 0) {
        cin >> x >> y;
        arr[x][y] = 1;
        m--;
    } 

    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
        {    
            if (arr[i][j] != 1) { //上下左右四个方向的判断
                t = arr[i][j] + arr[i][j + 1] + arr[i][j - 1] + arr[i + 1][j] + arr[i - 1][j];
                if (t < 2){cout << "NO" << endl; return 0;} 
            }       

        }

    }
    cout<<"YES"<<endl;
return 0;

 全部的代码如下

#include <iostream>
#include <iomanip>
#define N 1001
using namespace std;
int main()
{
	int arr[N][N] = {0};
	int n, m, i, j, x, y,t, flag = 0;
	cin >> n >> m;
	while (m > 0) {
		cin >> x >> y;
		arr[x][y] = 1;
		m--;
	} 

	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
		{
			
			if (arr[i][j] != 1) { //上下左右四个方向的判断
				t = arr[i][j] + arr[i][j + 1] + arr[i][j - 1] + arr[i + 1][j] + arr[i - 1][j];
				if (t < 2){cout << "NO" << endl; return 0;} 
			}
			

		}

	}
	cout<<"YES"<<endl;
return 0;

	return 0;
}

经过这个想一下如果八个方向呢?

我开始的时候是思考的是八个方向,最开始的时候想的没有那么完善,是这样的

num = 0;
                if (0 != arr[i][j + 1]) num++;// 右
                if (0 != arr[i][j - 1]) num++;//左
                if (0 != arr[i+1][j]) num++;//下
                if (0 != arr[i-1][j]) num++;//上
                if (0 != arr[i+1][j + 1]) num++; //右下
                if (0 != arr[i+1][j-1]) num++;//左下
                if (0 != arr[i-1][j + 1]) num++; //左下
                if (0 != arr[i-1][j - 1]) num++;//左上
                //if (num > 6&&arr[i][j]!=0) cout << arr[i][j]<<endl;
                if (num > 6 && arr[i][j] != 0) flag = 1;

我对八个方向来分析,如果说 他们在这个方向上有不是0的那就说明没有病毒,当没有病毒是的个数大于六时候说明就不能被感染,然后我前边还设置一个flag呢,只要有一个不被感染那就说明不被感染,那就当然是 NO 下面的这个不完整哈,只是一个想法而已,仅供参考

#include <iostream>
#include <iomanip>
#define N 101
using namespace std;
int main()
{
	int arr[N][N];
	int n,m,i,j,t=1,x,y,num,flag=0;
		cin >> n>>m; 
		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= n; j++)
			{
				 arr[i][j]=t++;
			}
		}
		while (m > 0) {
			cin >> x >> y;
			arr[x][y] = 0;
			m--;
		}

		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= n; j++)
			{
				num = 0;
				if (0 != arr[i][j + 1]) num++;// 右
				if (0 != arr[i][j - 1]) num++;//左
				if (0 != arr[i+1][j]) num++;//下
				if (0 != arr[i-1][j]) num++;//上
				if (0 != arr[i+1][j + 1]) num++; //右下
				if (0 != arr[i+1][j-1]) num++;//左下
				if (0 != arr[i-1][j + 1]) num++; //左下
				if (0 != arr[i-1][j - 1]) num++;//左上
				//if (num > 6&&arr[i][j]!=0) cout << arr[i][j]<<endl;
				if (num > 6 && arr[i][j] != 0) flag = 1;
				
			}
			
		}
		if (flag == 1) cout << "YES"<<endl;
		else cout << "NO" << endl;

		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= n; j++)
			{
				cout<< arr[i][j]<<setw(4);
			}
			cout <<"\n";
		}

	return 0;
}
1

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

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

相关文章

2023,数字政务潮水已至

城市是时代发展最鲜活的物理存在&#xff0c;政务是城市的“中枢系统”&#xff0c;将数字技术广泛应用于政府管理服务&#xff0c;既能提高政府公共服务的履约效能&#xff0c;亦顺应经济社会数字化转型的大趋势。 作者|子雨 出品|产业家 从集聚资源求增长&#xff0c;到…

Linux的文件系统和软硬链接

目录 文件系统 磁盘的物理结构&#xff1a; 磁盘的存储结构 磁盘的逻辑抽象结构 管理文件 那么文件如何与属于自己的内容关联起来&#xff1f; 创建一个文件&#xff0c;OS做了什么&#xff1f; 删除一个文件&#xff0c;OS做了什么&#xff1f; 软硬链接 硬链接 软连…

Python学习笔记——字典

字典是一种映射类型 &#xff0c;它是一个无序的集合。内部元素是键值对形式出现&#xff0c;即一个关键字&#xff08;key&#xff09;与一个值&#xff08;value&#xff09;的组合&#xff08;“键&#xff0d;值”对&#xff09;。字典是一种可变容器模型&#xff0c;且可存…

视频在线点播功能如何实现?

1. 视频点播需求分析1.1 需求描述视频点播需求如下&#xff1a;1、学生可以在windows浏览器上在线观看视频。2、播放器具有快进、快退、暂停等基本功能。1.2 视频点播解决方案1.2.1 流媒体详细参考&#xff1a;https://baike.baidu.com/item/%E6%B5%81%E5%AA%92%E4%BD%93/98740…

2023年网络安全比赛--网络安全应急响应中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交; 2.找出系统中被植入的后门用户删除掉,并将后门用户的账号作为Flag值提交(多个用户名之间以英文逗号分割,如:admi…

【项目】小帽教育(一)

小帽教育 第一章 项目开发环境搭建 一、项目背景 1.在线教育市场环境 在线教育行业是一个有着极强的广度和深度的行业&#xff0c;从校内到校外&#xff1b;从早幼教到职业培训&#xff1b;从教育工具到全信息化平台等等。 2020年的新冠疫情外生冲击&#xff0c;让在线教育…

Android 深入系统完全讲解(14)

2 如何定位编译问题 编译不出来&#xff0c;编译不生效&#xff0c;都是可以用比对的方式去处理。之前遇见只改资源单编译不生效&#xff0c;跟正常的一比较发现是系统编译机制是判断代码的时间戳&#xff0c;而不管资源目录&#xff0c;于是处理的方式就是单编配置强制&#…

过年了,我采集采集m3u8格式做做动态壁纸不过分吧

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 首先澄清一下&#xff0c;我用Python收集这些视频&#xff0c;绝不是想做别的什么&#xff0c; 真的只是用来做动态壁纸&#xff0c;大家不要误会&#xff01;我不是那样的人~ 这样的不过份吧 &#x1f63b; 环境 Python…

二叉树的深度 | 分治 +回溯 + 迭代

二叉树的最大深度 leetcode https://leetcode.cn/problems/maximum-depth-of-binary-tree/ 回溯基本思路 二叉树的最大深度就是 : 从根节点到叶子节点的最大的深度 定义一个全局变量 int res 0 , 以及局部变量 depth 表示当前层的深度当我们访问到根节点的时候(前序位置), 就…

亿信华辰出席2022DAMA中国数据管理峰会,共话数据治理

2023年1月7日-8日&#xff0c;万众瞩目的2022DAMA中国数据管理峰会在上海成功举办&#xff0c;国内外知名行业领袖、业内优秀企业代表出席了会议。会上&#xff0c;围绕 “数据基础制度和数字化转型”主题&#xff0c;前沿观点高能碰撞、专家学者共话未来。亿信华辰首席运营官毛…

CTP开发(1)CTP开发的概述

CTP是上海期货交易所开发的一套程序化交易的API。这篇文章呢&#xff0c;是进行扫盲和引路的&#xff0c;让你在开发时可以少走弯路。1、如果你要进行CTP开发&#xff0c;那么先是在模拟环境下调试&#xff0c;这就需要去上期的仿真模拟网站simnow下载相应的API包。地址如下&am…

[数字信号处理]时域中的离散时间信号和系统

离散时间信号最基本的形式是定义在等间隔的时间离散值上&#xff0c;且在这些离散时间上的信号振幅值是连续的。离散时间系统则是输入为离散时间信号输出也是离散时间信号的系统。对于线性时不变&#xff08;LTI&#xff09;系统来说&#xff0c;我们可以发现LTI系统与该系统的…

【4】Kubesphere_多租户

目录 创建企业空间角色 邀请新成员 部门管理 准备工作 创建部门 分配用户至部门 从部门中移除用户 删除和编辑部门 进入访问控制 可以配置企业空间、用户和用户角色 企业空间角色页面列出了以下四个可用的内置角色。创建企业空间时&#xff0c;KubeSphere 会自动创建内…

对称加密面临的那些挑战

密码对于多数人&#xff0c;是既熟悉又陌生的存在&#xff0c;注册账户、登录账号、网购&#xff0c;网络上的开展大多数行为都需要基于输入密码这一前提&#xff0c;从这方面谈&#xff0c;我们熟悉且熟知密码。然而这些由简单的字母、数字、符号等构成的简单口令&#xff0c;…

Spring Data默认值的错误

Spring Data有很多配置的默认值&#xff0c;但不一定都适合你。如一个依赖Cassandra 的项目&#xff0c;有时写入数据后&#xff0c;并不能立马读到。这种错误并没有什么报错&#xff0c;一切都是正常的&#xff0c;就是读不到数据。 1 源码解析 直接使用 Spring Data Cassan…

化繁为简,数字化推动企业数据库升级焕新 | 爱分析报告

报告编委 黄勇 爱分析合伙人&首席分析师 洪逸群 爱分析高级分析师 张良筠 爱分析分析师 外部专家&#xff08;按姓氏拼音排序&#xff09; 李远志 柏睿数据 副总裁 谢寅 镜舟科技 资深解决方案架构师 许哲 中信建投证券 数据组VP 姚延栋 YMatrix 创始人&#xff06;CEO 张晨…

实体店店铺管理软件应该怎么挑?有这几个功能的错不了!

现在开实体店的都是勇士&#xff0c;不仅要和同行竞争&#xff0c;还要和电商、直播竞争&#xff0c;没有点秘密武器根本不能生存。秘密武器之一&#xff0c;就是在做生意路上摸爬滚打多年的实体店老板们都在用的——实体店店铺管理软件&#xff01;它会帮助你从手工记账迈入智…

【敲敲云】零代码平台快速入门指南 — 下篇

敲敲云快速入门指南—上篇&#xff0c;我们已经介绍了工作表、视图的使用&#xff0c;现在我们再来看一下自动化工作流和仪表盘的使用 6、创建自动化工作流 工作流是由触发器和若干自动化任务节点组成。为触发器设置一个触发条件&#xff0c;当数据的变更符合触发条件时&#…

Linux系统中的文件查看和查询命令

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

向“全栈”进发,大型线上商城实战项目,Spring Boot + Vue 前后端分离版本的商城来了(文末有视频)

新蜂商城 Vue 版本&#xff0c;它来了&#xff01;&#xff08;文末有视频&#xff09; 如上图所示&#xff0c;新蜂商城 Vue 版本已经开发完成&#xff0c;这是新蜂商城开源项目的第一个大版本更新&#xff0c;根据大量的用户调研&#xff0c;最终决定将新蜂商城升级为 Spring…