C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で行列の各行の最大要素を見つける方法

プログラミングにおいて、行列(2次元配列)から特定の値を抽出する操作は、よく使われる基本テクニックのひとつです。今回は、与えられた行列の各行の最大要素を見つけて出力する方法を解説します。

このタスクは非常にシンプルです。各行に対して暫定最大値をリセットし、行内の要素を順番に比較して最大値を求め、それを出力するだけです。それでは、理解を深めるために実際のコードを見てみましょう。

アルゴリズムの流れ

処理の手順は以下の通りです。

  1. 各行について、その行の最初の要素を暫定最大値として設定します。
  2. 2番目の要素から順に、暫定最大値と比較していきます。
  3. 比較対象の要素が暫定最大値より大きければ、暫定最大値を更新します。
  4. 行の走査が完了した時点で、その行の最大値を出力します。

サンプルコード

#include<iostream>
#define MAX 10
using namespace std;

void largestInEachRow(int mat[][MAX], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        int max_row_element = mat[i][0];
        for (int j = 1; j < cols; j++) {
            if (mat[i][j] > max_row_element)
                max_row_element = mat[i][j];
        }
        cout << max_row_element << endl;
    }
}

int main() {
    int row = 4, col = 4;
    int mat[][MAX] = { { 3, 4, 1, 81 },
                       { 1, 84, 9, 11 },
                       { 23, 7, 21, 1 },
                       { 2, 1, 44, 5 }
    };
    largestInEachRow(mat, row, col);
}

実行結果

81
84
23
44

コードの解説

このプログラムのポイントは、外側のループで行を、内側のループで列を走査する二重ループ構造にあります。

まず、変数max_row_elementに行の先頭要素mat[i][0]を代入して初期化します。次に、内側のループで2列目以降の要素をひとつずつ確認し、現在の暫定最大値より大きい値が見つかれば更新します。内側のループが終わった時点で、max_row_elementにはその行の最大値が格納されているため、それを出力します。

この方法の計算量はO(rows × cols)です。行列の全要素を一度だけ走査すればよいため、非常に効率的なアルゴリズムといえます。

  1. C++で二分木の各階層における最大値を見つける方法

    二分木が与えられたとき、その木の各階層(レベル)ごとの最大値を求めることを考えます。例えば、次のような二分木があるとします。この場合、出力は [1, 3, 9] となります。ルート(最上位)の階層には「1」だけが存在するため、最大値は 1第1階層には「3」と「2」があり、最大値は 3第2階層には「5」「3」「9」があり、最大値は 9解決のためのアプローチこの問題は、再帰的な深さ優先探索(DFS) を使うことで簡潔に解くことができます。手順は以下の通りです。結果を格納するための配列 ans を定義します。再帰関数 solve() を定義します。この関数はツリーノードとレベル(初期値は 0)を引数

  2. C++でグラフ行列の逆行列を求めるプログラムの実装方法

    本記事では、グラフ行列の逆行列を求めるC++プログラムについて詳しく解説します。行列の逆行列は、対象となる行列が正則(非特異)である場合、すなわち行列式が0ではない場合にのみ存在します。 逆行列を求める手法は複数ありますが、ここでは随伴行列(余因子行列の転置)と行列式を組み合わせて逆行列を計算する方法を紹介します。 アルゴリズムの手順 逆行列を求める際の処理の流れは以下の通りです。 開始 行列の逆行列を求める関数 INV() を定義する。 行列式を計算する関数 DET() を呼び出す。 随伴行列を生成する関数 ADJ() を呼び出す。 次の公式に基づいて逆行