題目傳送門
思路:
單詞頭的字母為乙個入讀,尾為乙個出度,先判斷能不能形成尤拉路徑
條件:
因為這是有向圖,起始點的in比out大1,終點的out比in大1,只有這兩個點的in和out是不一樣,其他點的in和out的一樣的,所以同時找到起點。
如果是迴路的話,找個有out的當起點就行,當然要按著字典序!
然後dfs判斷能不能形成,同時找到字典序最小的,具體就是從小的字母往下搜就行了。
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long
#define inf 0x3f3f3f3f
const
int maxn=1001;
int t,m,len,st;
int in[maxn],out[maxn];
bool vis[maxn];
int ord[maxn];
struct wordw[maxn];
bool cmp(word a,word b)
int findst()
else
if(out[i]-in[i]==1)
}if(x1>1||x2>1)return -1;
if(x1==0)}}
return ans;
}bool dfs(int st,int cnt)
return0;}
int main()
st=findst();
if(st==-1)
sort(w,w+m,cmp);
//for(int i=0;iif(!dfs(st,0))
printf("%s",w[ord[0]].s);
for(int i=1;iprintf(".%s",w[ord[i]].s);
printf("\n");
}return
0;}
NYOJ 99 單詞拼接 尤拉迴路
時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 給你一些單詞,請你判斷能否把它們首尾串起來串成一串。前乙個單詞的結尾應該與下乙個單詞的道字母相同。如aloha dogarachnid gopher tiger rat可以拼接成 aloha.arachnid.dog.gophe...
nyoj 99 單詞拼接 euler, dfs
記憶體限制 64mb 時間限制 3000ms 特判 no 通過數 7 提交數 14 難度 5 給你一些單詞,請你判斷能否把它們首尾串起來串成一串。前乙個單詞的結尾應該與下乙個單詞的道字母相同。如aloha dogarachnid gopher tiger rat可以拼接成 aloha.arachni...
UVa 10129單詞(尤拉迴路)
題意是輸入n個單詞,是否可以把所有這些單詞排成乙個序列,使得每個單詞的第乙個字母和上乙個單詞的最後乙個字母相同。輸入中可以有重複單詞。由於最後只需要判斷是否能排成這樣的乙個序列,所以沒有輸入單詞後,只需要把首尾字母儲存下來,然後可以dfs深度遞迴。由於可能會有重複單詞,在這裡可以設乙個times陣列...