題目乍一看就是 dfs ,拼接字母,但是資料量不一定純 dfs 暴力就能解決,所以我們換個角度,每個相同的字母可以連在一起,我們最終是要給他們連成乙個句子,那麼我們把每個相同的單詞看做節點,這就是個尤拉迴路啊。。
那麼這樣就好處理了,開始判斷,因為一共最多 52 個字母,所以只有 52 個點,我們記錄入度出度,一旦入度出現大於2的,肯定不行了,一旦入度為1的 肯定是起點或終點,如果都為偶數就是個環,然後再以字典序比較低的字母作為起點,跑一邊尤拉迴路,得出結果倒敘輸出。。就完成了。。。。
以下是ac**
#includeusing namespace std;
inline int read()
while(c>='0'&&c<='9')
return s*w;
}inline int asc(char x) //字元轉化為數字
inline char get(int x)//數字轉化為字元
const int maxn = 1005;
int mp[maxn][maxn];
int in[maxn];
int s[maxn],tot;
void add(int a,int b)
void dfs(int x)
}s[++tot] = x;
}int main()
int cnt = 0, st = 55;
for(int i=1;i<=52;i++)
}if(cnt !=0 && cnt != 2)
if(cnt == 0)}}
tot = 0;
dfs(st);
for(int i=tot;i>0;i--)
return 0;
}
P1341 無序字母對
給定n個各不相同的無序字母對 區分大小寫,無序即字母對中的兩個字母可以位置顛倒 請構造乙個有n 1個字母的字串使得每個字母對都在這個字串中出現。輸入格式 第一行輸入乙個正整數n。以下n行每行兩個字母,表示這兩個字母需要相鄰。輸出格式 輸出滿足要求的字串。如果沒有滿足要求的字串,請輸出 no solu...
P1341 無序字母對
給定n個各不相同的無序字母對 區分大小寫,無序即字母對中的兩個字母可以位置顛倒 請構造乙個有n 1個字母的字串使得每個字母對都在這個字串 現。輸入格式 第一行輸入乙個正整數n。以下n行每行兩個字母,表示這兩個字母需要相鄰。輸出格式 輸出滿足要求的字串。如果沒有滿足要求的字串,請輸出 no solut...
落谷P1341無序字母對
題目描述 給定n個各不相同的無序字母對 區分大小寫,無序即字母對中的兩個字母可以位置顛倒 請構造乙個有n 1個字母的字串使得每個字母對都在這個字串中出現。輸入格式 第一行輸入乙個正整數n。以下n行每行兩個字母,表示這兩個字母需要相鄰。輸出格式 輸出滿足要求的字串。如果沒有滿足要求的字串,請輸出 no...