矩阵的幂运算
定义的那个矩阵幂运算的递归函数似乎不能正确递归,想了半天也不知问题出在何处,望各位大哥予以指点,在此谢谢了!
代码:
递归 C 矩阵 struct
#include "stdafx.h"
#include<stdio.h>
#include<iostream>
using namespace std;
#define N 6
struct matrix
{
int t[N][N];
};
matrix w,ee,a;
matrix mi(matrix a,int nn)
{
int i,j;
int kk;
if(1==nn)
return w;
for(i=1;i<N;i++)
for(j=1;j<N;j++)
for(kk=1;kk<N;kk++)
ee.t[i][j]+=w.t[i][kk]*a.t[kk][j];
for(i=1;i<N;i++)
for(j=1;j<N;j++)
w.t[i][j]=ee.t[i][j];
return mi(w,--nn);
}
int _tmain(int argc, _TCHAR* argv[])
{
matrix result;
int i,j;int k,l,step;
int p,q;
for(i=1;i<=N;++i) //输入前的矩阵清零
for(j=1;j<=N;j++)
a.t[i][j]=0;
while(scanf_s("%d %d",&p,&q)) // 图的输入 以 0 0 标志结束输入
{
if((p==0)&&(q==0))
break;
else
a.t[p][q]=a.t[q][p]=1;
}
for(i=1;i<N;i++)
for(j=1;j<N;j++)
w.t[i][j]=a.t[i][j];
for(i=1;i<N;++i)
{
for(j=1;j<N;j++)
printf("%d ",a.t[i][j]);printf("\n");
}
while(1)
{
printf("k to l in s steps \n such as k l steps\n");
cin>>k>>l>>step;
result=mi(a,step);
printf("there %d paths for %d to %d .\n",result.t[k][l],k,l);
for(i=1;i<N;++i)
{
for(j=1;j<N;j++)
printf("%d ",w.t[i][j]);printf("\n");
}
}
return 0;
}
matrix multi(matrix a, matrix b){
matrix c;
for(int i = 1; i < N; ++i) for(int j = 1; j < N; ++j) c[i][j] = 0;
for(int i = 1; i < N; ++i){
for(int j = 1; j < N; ++j){
for(int k = 1; k < N; ++k){
c.t[i][j] += a.t[i][k] * b.t[k][j];
}
}
}
return c;
}
matrix mi(matrix a,int nn)
{
if(nn == 1) return a;
matrix tt = mi(a, nn / 2);
tt = multi(tt, tt);
if(nn % 2) return multi(tt, a);
return tt;
}