尤拉迴路 無序字母隊

2022-09-20 17:27:10 字數 2196 閱讀 4890

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

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

第二行到第 (n+1)(n+1)(n+1) 行每行兩個字母,表示這兩個字母需要相鄰。

輸出滿足要求的字串。

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

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

輸入 #1

4

aztz

xtax

輸出 #1

xaztx
不同的無序字母對個數有限,nnn 的規模可以通過計算得到。

1 #include2

using

namespace

std;34

intn;

5int vhash[1100][1100];6

int tot=0;7

int vis[11000];8

int gin[11000];9

10void

readp()23}

2425

int ans[11100],cnt=0;26

27void dfs(int

pos)

34for(int i='

a';i<='

z';i++)

35if(vhash[i][pos]>0

)40 ans[++cnt]=pos;41}

4243

void

work()

53 }//

兩者效果一樣,只不過是兩個分開的解集

54for(int i='

a';i<='

z';i++)

55if(vis[i]==1)61

}6263dfs(tip);

64//

判斷it is very important

65if(qt&&qt!=2)cout<

no solution

"<

66else

if(cnt1)cout<

no solution

"<

67else72}

7374

intmain()

1 #include//

萬能頭2

using

namespace

std;

3const

int maxn=10000+10;4

int n,m,dis[maxn][maxn],s1=maxn,ans;//

dis是用來存兩點的連線

5char ru[maxn],a[maxn];//

ru存度數,a存路徑

6void

out()

11void find(int i)

18 a[++ans]=i;//

記錄路徑

19return;20

}21intmain()

32int cnt=0,h=0;//

開始找點

33for(int i=1;i<=150;i++)//

在找度數為奇數的點

34if(ru[i]&1)38

if(!h)//

找不到奇點,就是另外找點

39for(int i=0;i<150;i++)

40if(ru[i])

41if(cnt&&cnt!=2)45

find(h);

46if(ans1)

50out();//

輸出51

return

0;//

完結散花

52 }

尤拉迴路 無序字母對

無序字母對的題目鏈結 思考 為什麼路徑要倒著存放 尤拉迴路中的奇度頂點必須是2個或者0個,才可以一筆畫完 include 差值是6 using namespace std 100 100 int flag 100 int book 100 int book2 100 100 stack int q ...

無序字母對 洛谷1341 尤拉迴路

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

洛谷1341 無序字母對(尤拉迴路)

點此看題面 大致題意 給你 n 個各不相同的無序字母對 注意 兩個字母可能相同,被這個坑了好幾次 請構造乙個長度為 n 1 的字串包含每個字母對。這是一道裸的尤拉迴路,只不過是字串版的,步驟較經典版略顯麻煩。依照尤拉迴路的思路,我們先統計出每個字母出現的次數。然後對其中奇點的個數分類討論 若沒有奇點...