#include<stdio.h>
#include<conio.h>
#define MAX 15
#define INF 4294967295
int num,p[MAX+1],n;
void print(int [][MAX],int,int);
void matrixchainorder();
void setdata();
void printorder();
void print(int s[MAX][MAX],int i,int j)
{
if(i==j)
else
{
}
}
printf("A%d",num++);
printf("(");
print(s,i,s[i][j]);
printf(" x ");
print(s,s[i][j]+1,j);
printf(" ) ");
void matrixchainorder()
{
unsigned int q;
unsigned long m[MAX][MAX]={0};
int s[MAX][MAX]={0};
int l,j,i,k;
for(l=2;l<=n;l++)
for(i=1;i<=n-l+1;i++)
{
j=i+l-1;
m[i][j]=INF;
for(k=i;k<j;k++)
{
q=m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
if(q < m[i][j])
{
m[i][j]=q;
s[i][j]=k;
}
}
}
printf("Number of Multiplications are %d ",m[1][n]);
num=1;
printf("Order of Multiplication is: ");
print(s,1,n);
}
void setdata()
{
int i;
printf("\nEnter number of matrices: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("Enter %d matrix size:",i);
scanf("%d%d",&p[i-1],&p[i]);
}
}
void printorder()
{
int i,j;
matrixchainorder();
}
void main()
{
setdata();
printorder();
}
Output:
Enter number of matrices: 3
Enter 1 matrix size:2 2
Enter 2 matrix size:2 3
Enter 3 matrix size:3 2
Number of Multiplications are 20 Order of Multiplication is: (A1 x (A2 x A3 ) )