矩阵相乘算法

1283阅读 0评论2010-11-10 liyongchao89
分类:C/C++

#include
#define max 100
void matrixChain(int *p,int n,int m[max][max],int s[max][max]){        //矩阵连乘的函数算出最小的次数
    int i,r,j,k,t;
    for(i=1;i<=n;i++){        //初始化m[i][j],一个矩阵的相乘所用的次数为0
        for(j=1;j<=n;j++){
            m[i][j]=0;    
        }
    }    
    for(r=2;r<=n;r++){        //r表示几个矩阵相乘
        for(i=1;i<=n-r+1;i++){
            j=i+r-1;
            m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];    
            s[i][j]=i;
            for(k=i+1;k                t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];    //找出最小的矩阵矩阵相乘次数的分隔点
                if(t                    m[i][j]=t;
                    s[i][j]=k;                    
                }
            }
        }
    }
}
int main(void){
    int p[max+1];
    int num;
    int m[max][max];
    int s[max][max];
    int i,j,col,row;
    printf("Please Input the number of martrix:");
    scanf("%d",&num);
    for(i=1;i<=num;i++){
        if(i==1){
            printf("Please input the martrix %d rows:",i);
            scanf("%d",&row);
            printf("Please input the martrix %d cols:",i);
            scanf("%d",&col);
            p[i-1]=row;
            p[i]=col;
        }
        else{
            printf("Please Input the %d martrix cols:",i);
            scanf("%d",&col);
            p[i]=col;
        }
    }
    matrixChain(p,num,m,s);
    for(i=1;i<=num;i++){
        for(j=1;j<=num;j++){
            printf("%d\t",m[i][j]);
        }
        printf("\n");
    }
    return 0;
}
上一篇:鸽舍原理
下一篇:最大公共子序列