基础训练:矩阵乘法

该程序可实现俩矩阵相乘,或者求矩阵的M次幂。

问题描述

给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
  A =
  1 2
  3 4
  A的2次幂
  7 10
  15 22

输入格式

第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值

输出格式

输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开

程序清单

#include <iostream>
#include <vector>
using namespace std;

int N=0,M=0;
//函数 MulMatrix()实现矩阵M1*M2 
vector<vector <int> > MulMatrix(vector<vector <int> > M1, vector<vector <int> > M2)
{
	vector<vector <int> > Mul(N, vector<int>(N,0));
	for(int i=0; i<N; i++)
		for(int j=0; j<N; j++)
			for(int k=0; k<N; k++)
			{
				Mul[i][j]+=M1[i][k]*M2[k][j];
			}
	return Mul;	
}

//函数ReMulMatrix()实现矩阵A的m次幂 
vector <vector <int> > ReMulMatrix(vector <vector <int> > A, int m)
{
	vector<vector <int> > ResultMatrix(N, vector<int>(N,0));
	for(int i=0; i<N; i++)  //初始化ResultMatrix为单位矩阵 
        	for(int j=0; j<N; j++)
        	{
        		if(i==j)
            		ResultMatrix[i][j]=1;
            }
	if(m==0)
	{
		return ResultMatrix;  //零次幂为单位矩阵 
	}
	else if(m==1)
		return A;  //1次幂为原矩阵 
	else
	    while(m!=0)
	    {
			ResultMatrix=MulMatrix(ResultMatrix, A);
			m--;
		}
	return ResultMatrix;
}

int main()
{
	cin>>N; //N=1-30
	cin>>M; //M=0-5
	//初始化输入a、输出b为包含N个vector<int>的容器,且每个vector<int>包含N个0 
	vector<vector<int> > Output(N, vector<int>(N,0)), a(N, vector<int>(N,0));
	//输入 
	for(int i=0; i<N; i++)
		for(int j=0; j<N; j++)
		{
			cin>>a[i][j];
		}  
	//计算 
	Output = ReMulMatrix(a, M);
	// 输出 
	for(int i=0; i<N; i++)
	{
		for(int j=0; j<N; j++)
		{
			cout<<Output[i][j]<<" ";
		} 
		cout<<endl;
	}
	return 0;
}

测试效果

在这里插入图片描述

发布了45 篇原创文章 · 获赞 50 · 访问量 3531

猜你喜欢

转载自blog.csdn.net/wjinjie/article/details/104643412