c语言写一个数字三角形寻找最大路径算法并分析
时间: 2024-02-06 21:03:11 浏览: 188
数字三角形问题是指给定一个数字三角形,从三角形的顶部出发,找到一条从顶部到底部的路径,使得路径上经过数字的和最大。这个问题可以使用动态规划算法来解决,以下是一个使用 C 语言实现的数字三角形寻找最大路径算法示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int n;
scanf("%d", &n);
int triangle[MAX_N][MAX_N];
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
scanf("%d", &triangle[i][j]);
}
}
// 从倒数第二行开始向上递推
for (int i = n-2; i >= 0; i--) {
for (int j = 0; j <= i; j++) {
triangle[i][j] += max(triangle[i+1][j], triangle[i+1][j+1]);
}
}
printf("%d\n", triangle[0][0]);
return 0;
}
```
在上述示例中,我们首先从标准输入中读取数字三角形的大小 `n`,然后使用一个二维数组 `triangle` 来存储数字三角形中的所有数字。接着,我们从倒数第二行开始向上递推,对于每个数字,选择它下一行相邻的两个数字中较大的一个加上它自己,作为从当前位置出发的最大路径和。最后输出结果即可。
这个算法的时间复杂度为 O(n^2),空间复杂度也为 O(n^2)。由于动态规划的思想,这个算法可以保证找到最优解。
阅读全文