Ошибка сегментации во время выполнения матричного умножения.
Я писал код для матричного умножения. Я поступил следующим образом.
Моя программа получает ошибку сегментации. Я снова прочитал код, но не смог понять проблему.
Моя логика.
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;
}
Я ожидаю, что фактический результат будет минимальным числом умножений, необходимых для умножения матриц