Bootstrap

c++实现1127: 矩阵乘积

问题描述:

代码实现:

#include <iostream>
using namespace std;

#include<vector>

void shuru(int hang,int lie,vector<vector<int>>&arr)
{
    for(int i=0;i<hang;i++)
    {
        vector<int>arr_row;//一行
        for(int j=0;j<lie;j++)
        {
            int temp;
            cin>>temp;
            arr_row.push_back(temp);
        }
        arr.push_back(arr_row);//把这一行添加到二维数组中
    }
}

void shuchu(int hang,int lie,vector<vector<int>>&arr)
{
    for(int i=0;i<hang;i++)
    {
        for(int j=0;j<lie;j++)
        {
           cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
}

void computer(vector<vector<int>>&arr_A,vector<vector<int>>&arr_B,vector<vector<int>>&arr_result,int result_hang,int result_lie,int B_hang)
{
    for(int i=0;i<result_hang;i++)
    {
        vector<int>arr_row_result;//一行
        for(int j=0;j<result_lie;j++)
        {
            int temp=0;
            //获取arr_A的第i行数据
            vector<int>arr_row_A=arr_A[i];
            //获取arr_B的第j列数据
             vector<int>arr_lie_B;
             for(int i=0;i<B_hang;i++)
            {
                arr_lie_B.push_back(arr_B[i][j]);
            }
            //相乘
            for(int i=0;i<arr_row_A.size();i++)
            {
                temp+=arr_row_A[i]*arr_lie_B[i];
            }
            arr_row_result.push_back(temp);
        }
        arr_result.push_back(arr_row_result);//把这一行添加到二维数组中
    }
}

int main()
{
    int n1,n2,n3;
    cin>>n1>>n2>>n3;//(n1,n2)和(n2,n3)
    vector<vector<int>>arr_A;
    vector<vector<int>>arr_B;
    shuru(n1,n2,arr_A);//数组A
    shuru(n2,n3,arr_B);//数组B
    //cout<<"输出:"<<endl;
    //shuchu(n1,n2,arr_A);
    //shuchu(n2,n3,arr_B);

   // cout<<"计算:"<<endl;
    vector<vector<int>>arr_result;
    computer(arr_A,arr_B,arr_result,n1,n3,n2);

    shuchu(n1,n3,arr_result);
}

效果展示:


思路解析:

首先是先将数组A和数组B输入,核心部分是计算矩阵相乘之后得到的result数组,核心的方法是先得到数组A的第i行,再得到数组B的第j列,然后将他们相乘,相乘得到的这个数放进result数组中。

(1)数组的输入

void shuru(int hang,int lie,vector<vector<int>>&arr)
{
    for(int i=0;i<hang;i++)
    {
        vector<int>arr_row;//一行
        for(int j=0;j<lie;j++)
        {
            int temp;
            cin>>temp;
            arr_row.push_back(temp);
        }
        arr.push_back(arr_row);//把这一行添加到二维数组中
    }
}

(2)数组的输出


void shuchu(int hang,int lie,vector<vector<int>>&arr)
{
    for(int i=0;i<hang;i++)
    {
        for(int j=0;j<lie;j++)
        {
           cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
}

(3)矩阵相乘

①获取数组A的第i行

//获取arr_A的第i行数据
            vector<int>arr_row_A=arr_A[i];

②获取数组B的第j列

//获取arr_B的第j列数据
             vector<int>arr_lie_B;
             for(int i=0;i<B_hang;i++)
            {
                arr_lie_B.push_back(arr_B[i][j]);
            }

③计算相乘结果temp

//相乘
            for(int i=0;i<arr_row_A.size();i++)
            {
                temp+=arr_row_A[i]*arr_lie_B[i];
            }
            arr_row_result.push_back(temp);

好啦,希望能够帮助到大家!

;