UVA ~ 699 ~ The Falling Leaves(이차수의 DFS)

제목: 두 갈래 나무를 한 그루 주면 매 결점마다 수평 위치가 있다. 왼쪽 결점은 왼쪽에 한 단위, 오른쪽 결점은 오른쪽에 한 단위이다.왼쪽에서 오른쪽으로 각 수평 위치의 모든 결점의 권한 값의 합을 출력합니다.그림6-7에서 보듯이 왼쪽에서 오른쪽까지의 세 위치의 권리는 각각 7,11,3이다.반복 (순서) 방식으로 입력하고 -1로 빈 트리를 표시합니다.
사고방식: 그룹을 열어 이 열의 합을 유지하면 된다. DFS를 입력하면서 통계를 작성한다.
#include
using namespace std;
const int MAXN = 200;
int v, sum[MAXN];
void dfs(int pos)
{
    scanf("%d", &v);
    if (v != -1) sum [pos-1] += v, dfs(pos-1);
    scanf("%d", &v);
    if (v != -1) sum [pos+1] += v, dfs(pos+1);
}
int main()
{
    int CASE = 1;
    while (~scanf("%d", &v) && v != -1)
    {
        memset(sum, 0, sizeof(sum));
        sum[MAXN/2] = v; dfs(MAXN/2);
        printf("Case %d:
", CASE++); for (int i = 0; i < 200; i++) { if (sum[i]) printf("%d", sum[i]); if (sum[i] && sum[i+1] != 0) printf(" "); } printf("

"); } return 0; } /* 5 7 -1 6 -1 -1 3 -1 -1 8 2 9 -1 -1 6 5 -1 -1 12 -1 -1 3 7 -1 -1 -1 -1 */

좋은 웹페이지 즐겨찾기