題目:
題目描述
給定n個各不相同的無序字母對(區分大小寫,無序即字母對中的兩個字母可以位置顛倒)。請構造一個有n+1個字母的字符串使得每個字母對都在這個字符串中出現。
輸入輸出格式
輸入格式:
第一行輸入一個正整數n。
以下n行每行兩個字母,表示這兩個字母需要相鄰。
輸出格式:
輸出滿足要求的字符串。
如果沒有滿足要求的字符串,請輸出“No Solution”。
如果有多種方案,請輸出前面的字母的ASCII編碼儘可能小的(字典序最小)的方案
輸入輸出樣例
輸入樣例#1:
4
aZ
tZ
Xt
aX
輸出樣例#1:
XaZtX
思路:
講道理要不是在圖的遍歷專題看到這道題,實在是不會往圖方面去想,首先要用n+1個字母將n對字母表示出來,可以想到像是一個環形的圖,由起點出發遍歷所有除起點外的字母后又回到起點,但是又不能走重複路(否則n+1個字母根本不夠表示)這不正是歐拉圖的定義嗎,於是可以把每隊字母建無向邊,然後判斷是否能形成歐拉圖。(有2個或沒有奇數度節點),然後就是如何構建字典序最小的問題了,當有兩個奇數度節點的時候,顯然他們一個是起點一個是終點,而當沒有奇數度時,我們只需儘量挑選字典序最小的字母去當起點,然後從他的領接點又選出字典序最小的,這個過程用dfs較容易實現。