時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:5 描述
給你一些單詞,請你判斷能否把它們首尾串起來串成一串。
前乙個單詞的結尾應該與下乙個單詞的道字母相同。
如aloha
dogarachnid
gopher
tiger
rat可以拼接成:aloha.arachnid.dog.gopher.rat.tiger
輸入
第一行是乙個整數n(0輸出
如果存在拼接方案,請輸出所有拼接方案中字典序最小的方案。(兩個單詞之間輸出乙個英文句號".")
如果不存在拼接方案,則輸出
***
樣例輸入
26aloha
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的當起點就行,當然要按著字典序!然...