2012-12-26 22:12:35Morris

[UVA][stack] 12582 - Wedding of Sultan

題目意思:給定一個圖的走訪方式(dfs),問每個節點的 degree。

解法:
既然原本 dfs 是用 stack 去寫,那麼還原也是 stack 去模擬。
第一次遇到的字母 = push()
第二次遇到的字母 = pop(), 同時 top 是相連的符號。



#include <stdio.h>
#include <string.h>

int main() {
    int t, cases = 0, i;
    scanf("%d", &t);
    while(t--) {
        char s[105];
        int ans[128] = {}, stk[128];
        int stkIdx = -1;
        scanf("%s", s);
        for(i = 0; s[i]; i++) {
            if(stkIdx < 0 || stk[stkIdx] != s[i]) {
                stk[++stkIdx] = s[i];
                ans[s[i]]++;
            } else {
                stkIdx--;
                if(stkIdx >= 0)
                    ans[stk[stkIdx]]++;
            }
        }
        ans[s[0]]--;
        printf("Case %d\n", ++cases);
        for(i = 'A'; i <= 'Z'; i++)
            if(ans[i])
                printf("%c = %d\n", i, ans[i]);
    }
    return 0;
}