给定包含字符Z , P和*的矩阵mat [] [] ,其中Z是僵尸, P是植物,而*是光秃秃的土地。假设僵尸可以攻击植物(如果植物与僵尸相邻)(总共可能有8个相邻的单元格)。任务是打印可抵御僵尸的植物数量。
例子:
Input:
mat[] = { "**P*",
"*Z**",
"*Z**",
"***P" }
Output: 1
Input:
mat[] = { "**P*P",
"*Z**",
"*P**",
"***P" }
Output: 2
方法:如果当前元素是植物,则逐元素遍历矩阵,即mat [i] [j] =’P’,然后检查植物是否被任何僵尸包围(在所有8个相邻单元中)。如果工厂安全,则更新count = count + 1 。最后打印计数。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function that returns true if mat[i][j] is a zombie
bool isZombie(int i, int j, int r, int c, string mat[])
{
if (i < 0 || j < 0 || i >= r || j >= c
|| mat[i][j] != 'Z')
return false;
return true;
}
// Function to return the count of plants
// that survived from the zombies attack
int Plant_Vs_Zombies(string mat[], int row, int col)
{
int i, j, count = 0;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
// If current cell is a plant
if (mat[i][j] == 'P') {
// If current plant is safe from zombies
if (!isZombie(i - 1, j - 1, row, col, mat)
&& !isZombie(i - 1, j, row, col, mat)
&& !isZombie(i - 1, j + 1, row, col, mat)
&& !isZombie(i, j - 1, row, col, mat)
&& !isZombie(i, j, row, col, mat)
&& !isZombie(i, j + 1, row, col, mat)
&& !isZombie(i + 1, j - 1, row, col, mat)
&& !isZombie(i + 1, j, row, col, mat)
&& !isZombie(i + 1, j + 1, row, col, mat)) {
count++;
}
}
}
}
return count;
}
// Driver Code
int main()
{
// Input matrix
string mat[] = { "**P*", "*Z**", "*Z**", "***P" };
// Rows and columns of the matrix
int row = sizeof(mat) / sizeof(mat[0]);
int col = mat[0].length();
// Total plants survived
cout << Plant_Vs_Zombies(mat, row, col);
}
Java
// Java implementation of the approach.
class GfG
{
// Function that returns true if
// mat[i][j] is a zombie
static boolean isZombie(int i, int j, int r,
int c, String mat[])
{
if (i < 0 || j < 0 || i >= r || j >= c
|| mat[i].charAt(j) != 'Z')
return false;
return true;
}
// Function to return the count of plants
// that survived from the zombies attack
static int Plant_Vs_Zombies(String mat[],
int row, int col)
{
int i, j, count = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
// If current cell is a plant
if (mat[i].charAt(j) == 'P')
{
// If current plant is safe from zombies
if (!isZombie(i - 1, j - 1, row, col, mat)
&& !isZombie(i - 1, j, row, col, mat)
&& !isZombie(i - 1, j + 1, row, col, mat)
&& !isZombie(i, j - 1, row, col, mat)
&& !isZombie(i, j, row, col, mat)
&& !isZombie(i, j + 1, row, col, mat)
&& !isZombie(i + 1, j - 1, row, col, mat)
&& !isZombie(i + 1, j, row, col, mat)
&& !isZombie(i + 1, j + 1, row, col, mat)) {
count++;
}
}
}
}
return count;
}
// Driver code
public static void main(String []args)
{
// Input matrix
String[] mat = { "**P*", "*Z**", "*Z**", "***P" };
// Rows and columns of the matrix
int row = mat.length;
int col = mat[0].length();
// Total plants survived
System.out.println(Plant_Vs_Zombies(mat, row, col));
}
}
// This code is contributed by Rituraj Jain
Python3
# Python3 implementation of the approach.
# Function that returns true if
# mat[i][j] is a zombie
def isZombie(i, j, r, c, mat):
if (i < 0 or j < 0 or i >= r or
j >= c or mat[i][j] != 'Z'):
return True;
return False;
# Function to return the count of plants
# that survived from the zombies attack
def Plant_Vs_Zombies(mat, row, col):
count = 0;
for i in range(row):
for j in range(col):
# If current cell is a plant
if (mat[i][j] == 'P'):
# If current plant is safe from zombies
if (isZombie(i - 1, j - 1, row, col, mat) and
isZombie(i - 1, j, row, col, mat) and
isZombie(i - 1, j + 1, row, col, mat) and
isZombie(i, j - 1, row, col, mat) and
isZombie(i, j, row, col, mat) and
isZombie(i, j + 1, row, col, mat) and
isZombie(i + 1, j - 1, row, col, mat) and
isZombie(i + 1, j, row, col, mat) and
isZombie(i + 1, j + 1, row, col, mat)):
count += 1;
return count;
# Driver code
# Input matrix
mat = ["**P*", "*Z**", "*Z**", "***P"];
# Rows and columns of the matrix
row = len(mat);
col = len(mat[0]);
# Total plants survived
print(Plant_Vs_Zombies(mat, row, col));
# This code is contributed by mits
C#
// C# implementation of the approach.
using System;
class GfG
{
// Function that returns true if
// mat[i][j] is a zombie
static bool isZombie(int i, int j, int r,
int c, String []mat)
{
if (i < 0 || j < 0 || i >= r || j >= c
|| mat[i][j] != 'Z')
return false;
return true;
}
// Function to return the count of plants
// that survived from the zombies attack
static int Plant_Vs_Zombies(String []mat,
int row, int col)
{
int i, j, count = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
// If current cell is a plant
if (mat[i][j] == 'P')
{
// If current plant is safe from zombies
if (!isZombie(i - 1, j - 1, row, col, mat)
&& !isZombie(i - 1, j, row, col, mat)
&& !isZombie(i - 1, j + 1, row, col, mat)
&& !isZombie(i, j - 1, row, col, mat)
&& !isZombie(i, j, row, col, mat)
&& !isZombie(i, j + 1, row, col, mat)
&& !isZombie(i + 1, j - 1, row, col, mat)
&& !isZombie(i + 1, j, row, col, mat)
&& !isZombie(i + 1, j + 1, row, col, mat))
{
count++;
}
}
}
}
return count;
}
// Driver code
public static void Main(String []args)
{
// Input matrix
String[] mat = { "**P*", "*Z**", "*Z**", "***P" };
// Rows and columns of the matrix
int row = mat.Length;
int col = mat[0].Length;
// Total plants survived
Console.WriteLine(Plant_Vs_Zombies(mat, row, col));
}
}
// This code contributed by Rajput-Ji
PHP
= $r ||
$j >= $c || $mat[$i][$j] != 'Z')
return false;
return true;
}
// Function to return the count of plants
// that survived from the zombies attack
function Plant_Vs_Zombies($mat, $row, $col)
{
$i; $j; $count = 0;
for ($i = 0; $i < $row; $i++)
{
for ($j = 0; $j < $col; $j++)
{
// If current cell is a plant
if ($mat[$i][$j] == 'P')
{
// If current plant is safe from zombies
if (!isZombie($i - 1, $j - 1, $row, $col, $mat) &&
!isZombie($i - 1, $j, $row, $col, $mat) &&
!isZombie($i - 1, $j + 1, $row, $col, $mat) &&
!isZombie($i, $j - 1, $row, $col, $mat) &&
!isZombie($i, $j, $row, $col, $mat) &&
!isZombie($i, $j + 1, $row, $col, $mat) &&
!isZombie($i + 1, $j - 1, $row, $col, $mat) &&
!isZombie($i + 1, $j, $row, $col, $mat) &&
!isZombie($i + 1, $j + 1, $row, $col, $mat))
{
$count++;
}
}
}
}
return $count;
}
// Driver code
// Input matrix
$mat = array( "**P*", "*Z**", "*Z**", "***P" );
// Rows and columns of the matrix
$row = sizeof($mat);
$col = strlen($mat[0]);
// Total plants survived
echo(Plant_Vs_Zombies($mat, $row, $col));
// This code is contributed by Code_Mech.
?>
输出:
1
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。