矩阵乘法定义成数组过不了??为啥只能重载乘号,WA声一片,dalao救救
查看原帖
矩阵乘法定义成数组过不了??为啥只能重载乘号,WA声一片,dalao救救
413002
许君2333楼主2021/8/14 15:40
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=1e9+7,N=110;
struct mat
{
	ll m[110][110];
}a,sum;
ll n,k;

//矩阵相乘 
mat mul(mat a,mat b)
{
	mat ret;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			ret.m[i][j] = 0;
			
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			for(int k=1;k<=n;k++)
			{
				ret.m[i][j] += a.m[i][k]*b.m[k][j]%p;
				ret.m[i][j] %= p;
			}
		}
	}
	return ret;
} 
 
//矩阵快速幂

void qkp(mat a,int k)
{
	while(k>0)
	{
		if(k&1)
			sum = mul(sum,a);
		a = mul(a,a);
		k >>= 1 ;
	}
 } 

int main(int argc, char** argv) {
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>a.m[i][j];
			
	for(int i=1;i<=n;i++)
		sum.m[i][i] = 1; 
	qkp(a,k);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			cout<<sum.m[i][j]<<" ";
		cout<<"\n";
	}
	return 0;
}
2021/8/14 15:40
加载中...