执行矩阵链乘法时出现分段错误。
我正在编写矩阵链乘法的代码。我按照以下方式进行操作。
我的程序出现了一些分段错误。我再次阅读了代码,但无法解决问题。
我的逻辑。 A是2D矩阵,其中A [i] [j]存储将C_j乘以C_i所需的最小乘法数的值。 B是一维矩阵,其中B [i]存储C_ {i + 1}的行和C_i的列。
最初,我将值0分配给矩阵A的每个元素。该程序能够打印A的值,并且它还接受B的输入。
但是无法计算将C_1乘以C_n所需的最小运算数。 你能帮我解决问题吗
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Optimal(int **A, int *B, int n);
int main()
{
int n, **A,*B,i,m,j,k;
printf("\n Enter the number of natrices to be multiplied :");
scanf("%d",&n);
A =(int **)malloc((n+1)*sizeof(int *));
{
for(i=0; i<=n; i++)
{ A[i] = (int *)malloc(n*sizeof(int));
for( j=0; j<=n; j++)
{
A[i][j]=0;
}
}
}
printf("\n Array entered :\n");
for(i=1;i<=n;i++)
{
for(j=1; j<=n; j++)
{
printf("%d ", A[i][j]);
}
printf("\n");
}
B =(int *)malloc((n+1)*sizeof(int));
for(i=0;i<=n;i++)
{ printf("Input the Columns of Matrix %d and Rows of %d",i,i+1);
scanf("%d",&m);
B[i]=m;
}
Optimal(A,B,n);
printf("The Minimum Number of Calculations required is %d ",A[1][n]);
return 0;
}
int Optimal(int **A, int *B, int n)
{
int m=50000,j,i,k;
for(i=1;i<=n;i++)
{
A[i+1][i]=B[i+1]*B[i]*B[i-1];
}
for(k=2;k<n;k++)
{
for(i=k+1;i<=n;i++)
{
for(j=1;j<k;j++)
if(m<A[i+k][i+k-j]*A[i+k-j-1][i]+B[i+k]*B[i+k-j-1]*B[i])
{
m=A[i+k][i+k-j]*A[i+k-j-1][i]+B[i+k]*B[i+k-j-1]*B[i];
}
A[i+k][i]=m;
}
}
return 0;
}
我希望实际结果是将矩阵相乘所需的最小乘法数