矩阵乘法(c++算法)

雨燕双飞 提交于 2020-01-15 04:04:57

求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];
   }
  }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!