void matrixPow(int M[N][N],int n,int m,int Result[N][N]){
int i,j,M2[N][N],row,col,count,elem;
if(m==0){
for(i=0;i<n;i++){
for (j=0;j<n;j++){
if(i==j){
Result[i][j]=1;
}else Result[i][j]=0;
}
}
}else if(m==1){
for(i=0;i<n;i++){
for (j=0;j<n;j++){
Result[i][j]=M[i][j];
}
}
}else{
for(i=0;i<n;i++){
for (count=0;count<n;count++){
elem=0;
for (j=0;j<n;j++){
row=M[i][j];
col=M[j][count];
elem+=row*col;
}
if(elem>=1) M2[i][count]=1;
else M2[i][count]=0;
}
}
if(m==2){
for(i=0;i<n;i++){
for (j=0;j<n;j++){
Result[i][j]=M2[i][j];
}
}
}else{
for(int k=3;k<=m;k++){
if(k%2==1){
for(i=0;i<n;i++){
for (count=0;count<n;count++){
elem=0;
for (j=0;j<n;j++){
row=M2[i][j];
col=M[j][count];
elem+=row*col;
}
if(elem>=1) Result[i][count]=1;
else Result[i][count]=0;
}
}
}else{
for(i=0;i<n;i++){
for (count=0;count<n;count++){
elem=0;
for (j=0;j<n;j++){
row=Result[i][j];
col=M[j][count];
elem+=row*col;
}
if(elem>=1) M2[i][count]=1;
else M2[i][count]=0;
}
}
}
}
if(m%2==0){
for(i=0;i<n;i++){
for (j=0;j<n;j++){
Result[i][j]=M2[i][j];
}
}
}
}
}
}
求矩阵的N次幂
最新推荐文章于 2024-07-25 14:21:47 发布