#include <stdio.h> |
#include <stdlib.h> |
#define MAXN 101 |
int n,d[MAXN][MAXN]; |
int a[MAXN][MAXN]; |
void fnRecursive( int , int ); |
//递推方法函数声明 |
int fnMemorySearch( int , int ); |
//记忆化搜索函数声明 |
int main() |
{ |
int i,j; |
printf ( "输入三角形的行数n(n=1-100):\n" ); |
scanf ( "%d" ,&n); |
printf ( "按行输入数字三角形上的数(1-100):\n" ); |
for (i=1; i<=n; i++) |
for (j=1; j<=i; j++) |
scanf ( "%d" ,&a[i][j]); |
for (i=1; i<=n; i++) |
for (j=1; j<=i; j++) |
d[i][j]=-1; //初始化指标数组 |
printf ( "递推方法:1\n记忆化搜索方法:2\n" ); |
int select; |
scanf ( "%d" ,&select); |
if (select==1) |
{ |
fnRecursive(i,j); //调用递推方法 |
printf ( "\n%d\n" ,d[1][1]); |
} |
if (select==2) |
{ |
printf ( "\n%d\n" ,fnMemorySearch(1,1)); //调用记忆化搜索方法 |
} |
else |
printf ( "输入错误!" ); |
return 0; |
} |
void fnRecursive( int i, int j) |
//递推方法实现过程 |
{ |
for (j=1; j<=n; j++) |
d[n][j]=a[n][j]; |
for (i=n-1; i>=1; i--) |
for (j=1; j<=i; j++) |
d[i][j]=a[i][j]+(d[i+1][j]>d[i+1][j+1]?d[i+1][j]:d[i+1][j+1]); |
} |
int fnMemorySearch( int i, int j) |
//记忆化搜索实现过程 |
{ |
if (d[i][j]>=0) return d[i][j]; |
if (i==n) return (d[i][j]=a[i][j]); |
if (fnMemorySearch(i+1,j)>fnMemorySearch(i+1,j+1)) |
return (d[i][j]=(a[i][j]+fnMemorySearch(i+1,j))); |
else |
return (d[i][j]=(a[i][j]+fnMemorySearch(i+1,j+1))); |
} |
by: 发表于:2017-08-10 09:27:13 顶(0) | 踩(0) 回复
??
回复评论