UVA699 dfs and map

和书上的方法不一样。。。

因为我不知道节点,所以就直接用map来存左右了。

#include<bits/stdc++.h>

using namespace std;

map <int, int> m;
int l, r;
int cnt;

void dfs(int pos){
    int t1;
    scanf("%d", &t1);
    if (t1 != -1){
        dfs(pos - 1);
        l = min(l, pos - 1);
        m[pos - 1] += t1;
    }
    int t2;
    scanf("%d", &t2);
    if (t2 != -1){
        dfs(pos + 1);
        r = max(r, pos + 1);
        m[pos + 1] += t2;
    }
}

bool read_edge(){
    int a;
    scanf("%d", &a);
    if (a == -1) return false;
    l = 0, r = 0;
    m[0] += a;
    dfs(0);
    printf("Case %d:\n", ++cnt);
    for (int i = l; i <= r; i++){
        printf("%d%c", m[i], i == r ? '\n' : ' ');
    }
    m.clear();
    printf("\n");
    return true;
}

int main(){
    while (read_edge()){}
    return 0;
}
View Code

 

posted @ 2016-07-07 13:05  知る奇迹に  阅读(99)  评论(0编辑  收藏  举报