NYOJ 單詞拼接

2021-07-06 10:44:10 字數 1620 閱讀 2006

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:5 描述

給你一些單詞,請你判斷能否把它們首尾串起來串成一串。

前乙個單詞的結尾應該與下乙個單詞的道字母相同。

如aloha

dogarachnid

gopher

tiger

rat可以拼接成:aloha.arachnid.dog.gopher.rat.tiger

輸入

第一行是乙個整數n(0輸出

如果存在拼接方案,請輸出所有拼接方案中字典序最小的方案。(兩個單詞之間輸出乙個英文句號".")

如果不存在拼接方案,則輸出

***

樣例輸入

2

6aloha

arachnid

doggopher

rattiger

3oak

maple

elm

樣例輸出

aloha.arachnid.dog.gopher.rat.tiger

1:判斷有向圖尤拉圖

2 :對單詞排序,深搜求最小字典順,深蒐時標記每個邊是否使用過

#includeusing namespace std;

#pragma comment(linker,"/stack:1024000000,1024000000")

const int maxn = 1005*2;

struct node

;vectorg[maxn];

stacks;

int f[maxn];

int vis[maxn];

int in[maxn];

int out[maxn];

int flag[maxn];

int n;

int bian[maxn];

string a[maxn];

int res =1;

void init()

for(int i = 0 ; i1)

return false;

return true;

}int main()

sort(a+1,a+n+1);

for(int i = 1 ; i<=n; i++)

);flag[x] = 1;

flag[y] = 1;

add(x ,y);

in[y]++;

out[x]++;

}int cot = 0;

int xx,yy;

for(int i = 0 ; i<26; i++)

else if(cot==2)}}

if(judge())

{if(cot==0||(cot==2&&((in[xx]-out[xx]==1&&out[yy]-in[yy]==1)||( in[yy]-out[yy]==1&&out[xx]-in[xx]==1) )))

{// printf("cot = %d\n",cot);

if(cot==0)

{if(dfs(a[1][0]-'a',1,1))

{while(!s.empty())

{cout<

nyoj 99 單詞拼接 euler, dfs

記憶體限制 64mb 時間限制 3000ms 特判 no 通過數 7 提交數 14 難度 5 給你一些單詞,請你判斷能否把它們首尾串起來串成一串。前乙個單詞的結尾應該與下乙個單詞的道字母相同。如aloha dogarachnid gopher tiger rat可以拼接成 aloha.arachni...

NYOJ 99 單詞拼接 尤拉迴路

時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 給你一些單詞,請你判斷能否把它們首尾串起來串成一串。前乙個單詞的結尾應該與下乙個單詞的道字母相同。如aloha dogarachnid gopher tiger rat可以拼接成 aloha.arachnid.dog.gophe...

NYOJ 99 單詞拼接 尤拉迴路或路徑

題目傳送門 思路 單詞頭的字母為乙個入讀,尾為乙個出度,先判斷能不能形成尤拉路徑 條件 因為這是有向圖,起始點的in比out大1,終點的out比in大1,只有這兩個點的in和out是不一樣,其他點的in和out的一樣的,所以同時找到起點。如果是迴路的話,找個有out的當起點就行,當然要按著字典序!然...