【王道上机指南】矩阵加法+矩阵乘法+矩阵求幂+矩阵转置
矩阵结构体定义
const int MAXN=100;
struct Matrix{//矩阵的数据结构定义
int row,col;
int matrix[MAXN][MAXN];
Matrix(){}
Matrix(int r,int c):row(r),col(c){}
};
矩阵输入函数
void InputMatrix(Matrix& x){
for(int i=0;i<x.row;++i){
for(int j=0;j<x.col;++j){
cin>>x.matrix[i][j];
}
}
return;
}
矩阵输出函数
void OutputMatrix(Matrix x){
for(int i=0;i<x.row;++i){
for(int j=0;j<x.col;++j){
cout<<x.matrix[i][j]<<" ";
}
cout<<endl;
}
return;
}
矩阵加法
Matrix Add(Matrix x,Matrix y){
Matrix answer=Matrix(x.row,x.col);
for(int i=0;i<answer.row;++i){
for(int j=0;j<answer.col;++j){
answer.matrix[i][j]=x.matrix[i][j]+y.matrix[i][j];
}
}
return answer;
}
矩阵乘法
//矩阵相乘
Matrix Multiply(Matrix x,Matrix y){
Matrix answer=Matrix(x.row,y.col);
for(int i=0;i<answer.row;++i){
for(int j=0;j<answer.col;++j){
answer.matrix[i][j]=0;
for(int k=0;k<x.col;++k){
answer.matrix[i][j]+=x.matrix[i][k]*y.matrix[k][j];
}
}
}
return answer;
}
矩阵求幂
//矩阵求幂(前提是方阵)
Matrix QuickPower(Matrix x,int n){
Matrix answer=Matrix(x.row,x.col);
for(int i=0;i<answer.row;++i){
for(int j=0;j<answer.col;++j){
if(i==j){
answer.matrix[i][j]=1;
}else{
answer.matrix[i][j]=0;
}
}
}
while(n!=0){
if(n%2==1){
answer= Multiply(answer,x);
}
n/=2;//右移一位
x= Multiply(x,x);
}
return answer;
}
矩阵转置
//矩阵转置
Matrix Transpose(Matrix x){
Matrix answer=Matrix(x.col,x.row);
for(int i=0;i<x.col;++i){
for(int j=0;j<x.row;++j){
answer.matrix[i][j]=x.matrix[j][i];
}
}
return answer;
}
主函数
int main(){
int n;
while(cin>>n){
Matrix x(n,n);
Matrix y(n,n);
InputMatrix(x);
InputMatrix(y);
Matrix answer1=Add(x,y);
OutputMatrix(answer1);
Matrix answer2= Multiply(x,y);
OutputMatrix(answer2);
Matrix answer3= Transpose(x);
OutputMatrix(answer3);
int k;
cin>>k;
Matrix answer4= QuickPower(x,k);//k次方
OutputMatrix(answer4);
}
return 0;
}
运行结果
判断n维矩阵是否对称
//判断n维矩阵是否对称
const int MAXN=100;
struct Matrix{//矩阵的数据结构定义
int row,col;
int matrix[MAXN][MAXN];
Matrix(){}
Matrix(int r,int c):row(r),col(c){}
};
void InputMatrix(Matrix& x){
for(int i=0;i<x.row;++i){
for(int j=0;j<x.col;++j){
cin>>x.matrix[i][j];
}
}
return;
}
int main(){
int n;
bool flag=true;
while(cin>>n){
Matrix x(n,n);
InputMatrix(x);
for(int i=0;i<n;++i){
for(int j=i;j<n;++j){
if (x.matrix[i][j]!=x.matrix[j][i]){
flag=false;
break;
}
}
}
if(flag== false){
cout<<"No!"<<endl;
}else{
cout<<"Yes!"<<endl;
}
}
return 0;
}
运行结果