pranay_teja
8/9/2018 - 4:37 AM

Matrix multiplication

#include<iostream>
#include<bits/stdc++.h>
using namespace std;

// #Arrays

vector< vector<int> > vec_mul(vector< vector<int> > A, vector< vector<int> > B){
    int m=A.size();
    int n=A[0].size();
    int o=B.size();
    int p=B[0].size();
    vector< vector<int> > C(m) ;    // order of new matrix m*p
    for(int i=0;i<m;i++){
        C[i].resize(p);
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<p;j++){
            int x=0;
            for(int k=0;k<n;k++){
                x+=A[i][k]*B[k][j];
            }
            C[i][j]=x;
        }
    }
    return C;
}

int main(){
    int m,n;
    cin>>m>>n;  // order of first matrix
    vector< vector<int> > A(m) ;
    for(int i=0;i<m;i++){
        A[i].resize(n);
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            cin>>A[i][j];
        }
    }
    int o,p;
    cin>>o>>p;  // order of second matrix
    vector< vector<int> > B(o) ;
    for(int i=0;i<o;i++){
        B[i].resize(p);
    }
    for(int i=0;i<o;i++){
        for(int j=0;j<p;j++){
            cin>>B[i][j];
        }
    }
    if(n!=o || m==0 || n==0 || o==0 || p==0){
        cout<<"-1"; // multiplication not possible
    }else{
        vector< vector<int> > C(m) ;    // order of new matrix m*p
        for(int i=0;i<m;i++){
            C[i].resize(p);
        }
        C=vec_mul(A,B);
        for(int i=0;i<m;i++){
            for(int j=0;j<p;j++){
                cout<<C[i][j]<<" ";
            }
            cout<<endl;
        }
    }
    cout<<endl;
    return 0;
}