矩阵链乘法执行过程中的分段错误

时间:2019-04-28 06:46:31

标签: algorithm matrix segmentation-fault matrix-multiplication

执行矩阵链乘法时出现分段错误。

我正在编写矩阵链乘法的代码。我按照以下方式进行操作。

我的程序出现了一些分段错误。我再次阅读了代码,但无法解决问题。

我的逻辑。 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;
}

我希望实际结果是将矩阵相乘所需的最小乘法数

0 个答案:

没有答案