給定 nnn 個各不相同的無序字母對(區分大小寫,無序即字母對中的兩個字母可以位置顛倒)。請構造乙個有 (n+1)(n+1)(n+1) 個字母的字串使得每個字母對都在這個字串**現。
第一行輸入乙個正整數 nnn。
第二行到第 (n+1)(n+1)(n+1) 行每行兩個字母,表示這兩個字母需要相鄰。
輸出滿足要求的字串。
如果沒有滿足要求的字串,請輸出no solution
。
如果有多種方案,請輸出字典序最小的方案(即滿足前面的字母的 ascii 編碼盡可能小)。
輸入 #1
4輸出 #1aztz
xtax
xaztx不同的無序字母對個數有限,nnn 的規模可以通過計算得到。
1 #include2using
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 的字串包含每個字母對。這是一道裸的尤拉迴路,只不過是字串版的,步驟較經典版略顯麻煩。依照尤拉迴路的思路,我們先統計出每個字母出現的次數。然後對其中奇點的個數分類討論 若沒有奇點...