P1341 無序字母對 尤拉路徑

2021-09-12 14:47:51 字數 1012 閱讀 1411

題目:p1341 無序字母對

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

輸入格式:

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

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

輸出格式:

輸出滿足要求的字串。

如果沒有滿足要求的字串,請輸出「no solution」。

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

要求:構造乙個有n+1個字母的字串使得每個字母對都在這個字串**現。

題解:將每個字母看成乙個點,每對字母看成一條邊,題目要求就變成了,找到一條路徑,使其能經過所有邊並且每條邊只走一次(保證了只有n+1個字母),題目很明顯變成了乙個求尤拉路徑的題。

尤拉迴路:奇數度的點為0;尤拉路徑:奇數點的度為2;

#includeusing namespace std;

int n;

vectorg[130];

int du[130]=;

int st=130;

int ans=0;

int vis[130][130]=;

int path[2000];

int k=0;

void dfs(int i)

for(int i=65;i<130;i++) sort(g[i].begin(),g[i].end());//將每個點連線邊的終點 按字典序排序

for(int i=65;i<130;i++)

} //奇數點為2則存在尤拉路徑,奇數點為0則存在尤拉迴路

if(ans!=0&&ans!=2)

cout

}

P1341 無序字母對

給定n個各不相同的無序字母對 區分大小寫,無序即字母對中的兩個字母可以位置顛倒 請構造乙個有n 1個字母的字串使得每個字母對都在這個字串中出現。輸入格式 第一行輸入乙個正整數n。以下n行每行兩個字母,表示這兩個字母需要相鄰。輸出格式 輸出滿足要求的字串。如果沒有滿足要求的字串,請輸出 no solu...

P1341 無序字母對

給定n個各不相同的無序字母對 區分大小寫,無序即字母對中的兩個字母可以位置顛倒 請構造乙個有n 1個字母的字串使得每個字母對都在這個字串 現。輸入格式 第一行輸入乙個正整數n。以下n行每行兩個字母,表示這兩個字母需要相鄰。輸出格式 輸出滿足要求的字串。如果沒有滿足要求的字串,請輸出 no solut...

P1341 無序字母對

題目乍一看就是 dfs 拼接字母,但是資料量不一定純 dfs 暴力就能解決,所以我們換個角度,每個相同的字母可以連在一起,我們最終是要給他們連成乙個句子,那麼我們把每個相同的單詞看做節點,這就是個尤拉迴路啊。那麼這樣就好處理了,開始判斷,因為一共最多 52 個字母,所以只有 52 個點,我們記錄入度...