数字三角形问题
给定一个由n行数字组成的数字三角形,设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
#include <stdio.h>
#define N 5
int main()
{
int i,j;
int a[N][N]={{7},{3,8},{8,1,0},{2,7,4,4},{4,5,2,6,5}};
for(i=N-1;i>=0;i--)
for(j=0;j<=i;j++){//循环比较第i行第j列的数和第j+1列的数的大小,第i-1行第j列的数(类似于节点)加比较之后的大数
if(a[i][j]>a[i][j+1])
a[i-1][j]+=a[i][j];
else
a[i-1][j]+=a[i][j+1];
}
printf("%d\n",a[0][0]);//输出最终的数
}
/*
思路:
类似于二叉树
a
b c
d e f
g h i j
从下面两个数中,每次都取最大的一个数与上面的节点相加,所以依次加到最后一个即为最大。
*/