C/C++ 數字三角形
阿新 • • 發佈:2021-01-18
數字三角形 -遞迴演算法
給定一個由n行數字組成的數字三角形如下圖所示。試設計一個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。輸入格式:
第一行輸入N,1≤N≤100,表示有N行資料,第i行有i個元素。
輸出格式:
要求輸出最大和
輸入樣例:
在這裡給出一組輸入。例如:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
輸出樣例:
在這裡給出相應的輸出。例如:
30
程式碼:
#include <bits/stdc++.h>
using namespace std;
int a[101][101];//儲存個點的數值
int n;
int mx=0;//儲存路徑和的最大值
int def(int a[][101],int s,int h,int l)
{
s+=a[h][l];
if(h==n-1)//當行到達最底端時
{
if(s>mx)//比較路徑和
mx=s;
return 0;
}
def(a,s,h+1,l);//遞迴到下一行的相同列下標處
def(a,s,h+1,l+1);//遞迴到下一行的 列+1 下標處
return 0;
}
int main()
{
cin>> n;
for(int i=0;i<n;i++)
{
for(int j=0;j<i+1;j++)
{
cin>>a[i][j];
}
}
def(a,0,0,0);//引數分別為:各點陣列 路徑和 行 列
cout<<mx;
return 0;
}