我正在尝试计算从顶部到底部的数字三角形路径上出现的最大数字和,以便在每条路径上下一个数字位于下面的行上,更准确地说,直接在下方或下方,右侧一个地方。 获得分段错误。 不知道为什么??
#include<stdio.h>
#include<stdlib.h>
int func(int **arr, int n, int i,int max)
{
int j,m,a,b,c;
if(i==(n-1))
return max;
else
{
for(j=0;j<=i;j++)
{
a=*(*(arr+i)+j);
b=*(*(arr+(i+1))+j);
c=*(*(arr+(i+1))+(j+1));
if(((a+b)>=(a+c))&&((a+b)>max))
{
max=(a+b);
m=j;
}
if(((a+c)>(a+b))&&((a+c)>max))
{
max=(a+c);
m=j+1;
}
}
*(*(arr+(i+1))+m)=max;
func(arr,n,i+1,max);
}
}
int main()
{
int n,array[100][100],i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
scanf("%d",&array[i][j]);
}
printf("%d\n",func(array,n,0,0));
return 0;
}
答案 0 :(得分:1)
因为您将int array[100][100]
传递给int **
并且它们不可互换:
int func(int **arr, int n, int i,int max)
必须:
int func(int (*arr)[100], int n, int i,int max)
看看这个related question。