求n阶矩阵的m次幂
#include<iostream>
#include<stdio.h>
using namespace std;
int n;
void mul(int s[30][30],int s1[30][30],int s2[30][30],int n);
int main()
{
int str[30][30];
int s1[30][30];
int s2[30][30];
int m;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>str[i][j];
if(m==0)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(i==j)
s2[i][j]=1;
else
s2[i][j]=0;
}
}
if(m==1)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
s2[i][j]=str[i][j];
}
else
{
for(int i=2;i<=m;i++)
{
if(i==2)
{
mul(s1,str,str,n);
for(int q=0;q<n;q++)
for(int w=0;w<n;w++)
s2[q][w]=s1[q][w];
}
else
{
mul(s2,s1,str,n);
for(int q=0;q<n;q++)
for(int w=0;w<n;w++)
s1[q][w]=s2[q][w];
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%d ",s2[i][j]);
printf("\n");
}
return 0;
}
void mul(int s[30][30],int s1[30][30],int s2[30][30],int n)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
s[i][j]=0;
for(int k=0;k<n;k++)
{
s[i][j] +=s1[i][k]*s2[k][j];
}
}
}
来源:CSDN
作者:赞赞小飞侠
链接:https://blog.csdn.net/qq_45713497/article/details/103979180