Square Matrix Multiplication (5kyu)


https://www.codewars.com/kata/5263a84ffcadb968b6000513/solutions/cpp
前回の答えは...
https://velog.io/@mir21c/Number-of-Proper-Fractions-with-Denominator-d-4kyu
休憩のためにおすすめの5 kyuを書きました
たいしたことはない.
マトリクスに実装を乗算するだけです.
std::vector<std::vector<int>> matrix_multiplication(std::vector<std::vector<int>> &a, std::vector<std::vector<int>> &b, size_t n)
{
    std::vector<std::vector<int>> ret;

    int n1 = a.size();
    int m1 = a[0].size();

    int n2 = b.size();
    int m2 = b[0].size();

    ret.resize(n1);
    for (int r = 0; r < n1; ++r)
    {
        ret[r].resize(m2);
    }

    for (int r = 0; r < n1; ++r)
    {
        for (int c = 0; c < m2; ++c)
        {
            int sum = 0;
            for(int m = 0; m< m1; ++m)
            {
                sum +=a[r][m] * b[m][c];
            }

            ret[r][c]=sum;
        }
    }

    return ret;
}
何の説明もない.
追加:
フィールドでは、ライブラリを使用する場合が多いため、直接実装されませんが、マトリクスを処理する開発者が多い場合、行と列が混同されることが多いので、マトリクスを処理する際には、さらによく知っている方法を紹介します.
たとえば、2 Dマトリクスを定義する場合は、まず行(row)を定義し、次に下りを列(column)として定義することをお勧めします.下のようです.
int rowNo = 4;
int colNo = 6;
int ** m = new int*[rowNo];
for(int r = 0; r< rowNo;++r)
{
	m[r] = new int[colNo];
}
上記の問題では2つのベクトルを使用しています.
親ベクトルは行(row)、サブベクトルは列(column)の順になります.
また、データアクセス中に、
行列式で行ったほうがいいです.x、y座標系で表示する場合は、y->xの順になります.NAMEもrowをr columnにcにして混同しないようにする
for(int r = 0; r< rowNo ; ++r)
    for(int c = 0; c< colNo ; ++c)
       int a = m[r][c];
逆も同様ですが、メモリの観点から見ると、上記の操作は少し速いです.また、様々なマトリクスや画像を処理する際に、これらの順序を守ることが容易になります.