Chinaunix首页 | 论坛 | 博客
  • 博客访问: 396576
  • 博文数量: 70
  • 博客积分: 1919
  • 博客等级: 上尉
  • 技术积分: 1179
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 20:05
文章分类

全部博文(70)

文章存档

2014年(2)

2013年(29)

2012年(20)

2011年(1)

2010年(13)

2009年(5)

分类: C/C++

2010-11-10 13:49:45

#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;
}
阅读(1244) | 评论(0) | 转发(0) |
0

上一篇:鸽舍原理

下一篇:最大公共子序列

给主人留下些什么吧!~~