洛谷P1341 無序字母對(歐拉圖)

題目:

題目描述

給定n個各不相同的無序字母對(區分大小寫,無序即字母對中的兩個字母可以位置顛倒)。請構造一個有n+1個字母的字符串使得每個字母對都在這個字符串中出現。

輸入輸出格式
輸入格式:

第一行輸入一個正整數n。

以下n行每行兩個字母,表示這兩個字母需要相鄰。

輸出格式:

輸出滿足要求的字符串。

如果沒有滿足要求的字符串,請輸出“No Solution”。

如果有多種方案,請輸出前面的字母的ASCII編碼儘可能小的(字典序最小)的方案

輸入輸出樣例

輸入樣例#1:
4
aZ
tZ
Xt
aX

輸出樣例#1:
XaZtX

思路:

講道理要不是在圖的遍歷專題看到這道題,實在是不會往圖方面去想,首先要用n+1個字母將n對字母表示出來,可以想到像是一個環形的圖,由起點出發遍歷所有除起點外的字母后又回到起點,但是又不能走重複路(否則n+1個字母根本不夠表示)這不正是歐拉圖的定義嗎,於是可以把每隊字母建無向邊,然後判斷是否能形成歐拉圖。(有2個或沒有奇數度節點),然後就是如何構建字典序最小的問題了,當有兩個奇數度節點的時候,顯然他們一個是起點一個是終點,而當沒有奇數度時,我們只需儘量挑選字典序最小的字母去當起點,然後從他的領接點又選出字典序最小的,這個過程用dfs較容易實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章