C++ program to multiply two matrices has been shown here. Matrix $[A]_{m \times n}$ can be multiplied with matrix $[B]_{p \times q}$, iff $n = p$ i.e. the number of columns of the first matrix should to be equal to the number of rows in the second matrix. The order of the resultant matrix $C$ would be $m \times q$.

Algorithm, pseudocode and time complexity of the program have also been shown below.

## 1. Algorithm for matrix multiplication

1. Take two matrice $A_{m\times n}$ and $B_{p\times q}$ as input.

2. Declare another matrix $C_{m\times q}$ and initailize it with 0.

3. Check if $n = p$

4. If step  is false then display "Matrices can not be multiplied!" and go to step 

5. If step  is true, then

6. Repeat for each $i \in [0, m - 1]$

6.1. Repeat for each $j \in [0, q - 1]$

6.1.1. Repeat for each $k \in [0, p - 1]$

6.1.1.1. Perform $C[i][j] = C[i][j] + A[i][k] * B[k][j]$

7. Display $C_{m\times q}$ as the resultant matrix.

8. Exit program.

## 2. Pseudocode for matrix multiplication

Input: Two matrices $A_{m\times n}$ and $B_{p\times q}$

Output: $A * B$

1. Procedure matrixMultiplication($A_{m\times n}$, $B_{p\times q}$):

2. Initialize $C_{m\times q} = 0$

3. If $n == p$:

4. Repeat for each $i \in [0, m-1]$

5. Repeat for each $i \in [0, q-1]$

6. Repeat for each $k \in [0, p-1]$

7. $C_{ij}\leftarrow C_{ij} + A_{ik} * B_{kj}$

8. Return $C_{m\times q}$

9. Else:

10. Return Matrices can not be multiplied!

11. End Procedure

## 3. Time Complexity for matrix multiplication

Time Complexity: O($n^3$)

Where $n$ is the row and column size of two matrices.

## 4. C++ Program for matrix multiplication

Code has been copied
/***************************************
alphabetacoder.com
C++ Program for Matrix Multiplication
****************************************/
#include <iostream>

using namespace std;

int main() {
// declare variables
int m, n, p, q, i, j, k;
int A = {0}, B = {0}, C = {0};

//take input of the order of first matrix
cout << "Enter the number of row and column of first matrix: ";
cin >> m >> n;

//take input of the first matrix
cout << "Enter the first matrix of order " << m << " x " << n << " = " << endl;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
cin >> A[i][j];

//take input of the order of second matrix
cout << "Enter the number of row and column of second matrix: ";
cin >> p >> q;

//take input of the second matrix
cout << "Enter the second matrix of order " << p << " x " << q << " = " << endl;
for (i = 0; i < p; i++)
for (j = 0; j < q; j++)
cin >> B[i][j];

// check if number of columns in first matrix
// is same as number of rows in second matrix.
// If not, then matrices can not be multiplied
if (n != p)
cout << "\nMatrices can not be multiplied!";
else {
// do matrix multiplication
for (i = 0; i < m; i++) {
for (j = 0; j < q; j++) {
for (k = 0; k < p; k++)
C[i][j] += A[i][k] * B[k][j];
}
}

printf("The resultant matrix after multiplication:\n");
//display the result
for (i = 0; i < m; i++) {
for (j = 0; j < q; j++) {
cout << C[i][j] << " ";
}
//new  line
cout << endl;
}
}

return 0;
}


Output

Enter the number of row and column of first matrix: 4 3

Enter the first matrix of order 4 x 3 =

5 0 1

6 2 3

5 3 7

9 8 7

Enter the number of row and column of second matrix: 3 1

Enter the second matrix of order 3 x 1 =

5

6

7

The resultant matrix after multiplication:

32

63

92

142