📜  在矩阵中查找安全细胞

📅  最后修改于: 2021-05-31 18:29:17             🧑  作者: Mango

给定包含字符ZP*的矩阵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等的更多准备工作,请参阅“完整面试准备课程”