您的位置:首页 > 其它

UVA 10129 - Play on Words

2013-02-07 14:17 417 查看
/*

找欧拉路,先判断图是否连通,

*/

#include<cstdio>

#include<cstring>

#include<cstdlib>

int numf[30],nume[30],vis[30];

int map[30][30];

int dfs(int x)

{

vis[x]=0;

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

if(vis[i]&&map[x][i])

dfs(i);

}

int main()

{

int t,n,pf;

char a[1100];

scanf("%d",&t);

while(t--)

{

memset(numf,0,sizeof(numf));

memset(nume,0,sizeof(nume));

memset(vis,0,sizeof(vis));

scanf("%d",&n);

getchar();

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

{

gets(a);

int l = strlen(a);

int x = a[0]-'a';

int y = a[l-1]-'a';

numf[x]++;

nume[y]++;

map[x][y]++;

vis[x]=1;

vis[y]=1;

pf=x;

}

int flag=0,pj=0;

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

{

if(abs(numf[i]-nume[i])==1)

{

if(numf[i]>nume[i])

pf = i;

pj++;

}

else if(numf[i]!=nume[i])

{

flag=1;

break;

}

}

if(pj!=2&&pj!=0) flag=1;

dfs(pf);

int mx=0;

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

mx+=vis[i];

if(mx||flag)

printf("The door cannot be opened.\n");

else

printf("Ordering is possible.\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: