C++のマトリックスで安全なセルを見つける
行列mat[][]があるとします。キャラクターZとPがあります。Zはゾンビ、Pは植物です。そして別のキャラクター*は裸地です。植物がゾンビに隣接している場合、ゾンビは植物を攻撃する可能性があります。ゾンビから安全な植物の数を見つける必要があります。マトリックスが次のようになっていると仮定します-
したがって、安全な植物は2つだけです。
行列を要素ごとにトラバースし、現在の要素が植物の場合は、植物がゾンビに囲まれているかどうかを確認します。そうでない場合は、カウントを増やします。
例
#include<iostream> using namespace std; 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; } int countSafeCells(string matrix[], int row, int col) { int i, j, count = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (matrix[i][j] == 'P') { if (!isZombie(i - 1, j - 1, row, col, matrix) && !isZombie(i - 1, j, row, col, matrix) && !isZombie(i - 1, j + 1, row, col, matrix) && !isZombie(i, j - 1, row, col, matrix) && !isZombie(i, j, row, col, matrix) && !isZombie(i, j + 1, row, col, matrix) && !isZombie(i + 1, j - 1, row, col, matrix) && !isZombie(i + 1, j, row, col, matrix) && !isZombie(i + 1, j + 1, row, col, matrix)) { count++; } } } } return count; } int main() { string mat[] = { "**P*", "Z***", "*P**", "***P" }; int row = sizeof(mat) / sizeof(mat[0]); int col = mat[0].length(); cout << "Number of safe cells: " << countSafeCells(mat, row, col); }
出力
Number of safe cells: 2
-
C++の各ツリー行で最大値を見つける
二分木があるとすると、その木の各レベルの最大の要素を見つける必要があります。したがって、ツリーが次のような場合- その場合、出力は[3,5,8]になります。 これを解決するには、次の手順に従います- ansという配列を定義します 再帰関数solve()を定義します。これはツリーノードを取り、レベルは最初は0です。このメソッドは-のように機能します。 ノードがnullの場合は、を返します。 level =ansのサイズの場合、ノード値をansに挿入します。それ以外の場合、ans [level]:=ans[level]とノード値の最大値 呼び出しsol
-
行列の転置を見つけるためのC++プログラム
行列は、行と列の形式で配置された数値の長方形の配列です。行列の転置は、元の行が現在の列である新しい行列であり、その逆も同様です。たとえば。 マトリックスは以下のとおりです- 1 2 3 4 5 6 7 8 9 上記の行列の転置は次のとおりです。 1 4 7 2 5 8 3 6 9 行列の転置を見つけるプログラムは次のとおりです- 例 #include<iostream< using namespace std; int main() { int transpose[10][10], r=3, c=2, i, j; int a