1. 程式人生 > >[P1341]無序字母對 (歐拉回路)

[P1341]無序字母對 (歐拉回路)

char clu 經典的 tar 錯誤 搜索路徑 amp res show

我永遠信仰歐拉

歐拉回路是很經典的一道題目了

這題算是稍稍修改的模板題吧

歡迎指出錯誤

題目鏈接

思路

先判斷能不能構成歐拉路徑/回路

即度數為1的總點數為2或0的時候符合(前者為連通圖,後者為回路)

這題是回路吧

如果不可以,結束

如果可以,dfs搜索路徑(貌似搜索路徑還有模板來著)

代碼

代碼短,我就不壓了

 1 #include<bits/stdc++.h>
 2 #define maxn 257
 3 bool G[maxn][maxn];
 4 int deg[maxn];
 5 char tmp[maxn],res[maxn * maxn];
6 int n; 7 void dfs(int i) { 8 for (int j = 0; j < maxn; j++) { 9 if (G[i][j]) { 10 G[i][j] = G[j][i] = 0; 11 dfs(j); 12 } 13 } 14 res[n--] = i; 15 } 16 int main() 17 { 18 scanf("%d", &n); 19 for (int i = 0; i < n; i++) {
20 scanf("%s", tmp); 21 G[tmp[0]][tmp[1]] = G[tmp[1]][tmp[0]] = 1; 22 deg[tmp[0]]++; 23 deg[tmp[1]]++; 24 } 25 char fir = 0, cnt = 0; 26 for (int i = 0; i < maxn; i++) { 27 if (deg[i] & 1) { 28 cnt++; 29 if (!fir) fir = i;
30 } 31 } 32 if (!fir) for (int i = 0; i < maxn; i++) if (deg[i]) { fir = i; break; } 33 if (cnt && cnt != 2) return puts("No Solution"), 0; 34 dfs(fir); 35 puts(res); 36 }

[P1341]無序字母對 (歐拉回路)