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

2024-03-09 05:10

本文主要是介绍二维数组八个方向的判断--牛客刷题1023-病菌感染,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

铁子和顺溜上生物课的时候不小心将几滴超级病菌滴到了培养皿上,这可急坏了他们。
培养皿可以被看成一个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

这篇关于二维数组八个方向的判断--牛客刷题1023-病菌感染的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/789611

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序