作业 单词拼接
来源:互联网 发布:怀化干部教育网络 编辑:程序博客网 时间:2024/06/02 19:20
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 1010
struct Node{
int to;
}e[30][100];
int indegree[30];
int outdegree[30];
int next[Maxsize];
char str[Maxsize][35];
int que[Maxsize];
bool vis[Maxsize];
int top;
int m;
int count;
int cmp(const void *a,const void *b)
{
return strcmp((char *)a,(char *)b);
}
void init()
{
for(int i=0;i<30;i++)
{e[i][0].to=0;}
memset(indegree,0,sizeof(indegree));
memset(outdegree,0,sizeof(outdegree));
memset(vis,0,sizeof(vis));
count=m;top=0;
}
bool dfs(int u,int c)
{
if(c==count)
return true;
for(int i=1;i<=e[u][0].to;i++)
{
Node &E=e[u][i];
if(!vis[E.to])
{
vis[E.to]=1;
que[top++]=E.to;
if(dfs(next[E.to],c+1))
return true;
top--;
vis[E.to]=0;
}
}
return false;
}
int main()
{
int n;
int i;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
int l,r;
init();
for(i=0;i<m;i++)
{
scanf("%s",str[i]);
}
qsort(str,m,sizeof(str[0]),cmp);
for(i=0;i<m;i++)
{
l=str[i][0]-'a';
int t=++e[l][0].to;e[l][t].to=i;
r=strlen(str[i])-1;
next[i]=str[i][r]-'a';
outdegree[l]++;indegree[next[i]]++;
}
int flag=0;
for(i=0;i<26;i++)
if(indegree[i]!=outdegree[i])
flag++;
if(flag!=2&&flag!=0)
{
printf("***\n");
continue;
}
if(flag==2)
{
for(i=0;i<26;i++)
if(outdegree[i]-1==indegree[i])
{
dfs(i,0);
break;
}
}
else dfs(0,0);
if(top!=m)
{
printf("***\n");
continue;
}
for(i=0;i<top-1;i++)
printf("%s.",str[que[i]]);
printf("%s\n",str[que[top-1]]);
}
return 0;
}
#include <stdlib.h>
#define Maxsize 1010
struct Node{
int to;
}e[30][100];
int indegree[30];
int outdegree[30];
int next[Maxsize];
char str[Maxsize][35];
int que[Maxsize];
bool vis[Maxsize];
int top;
int m;
int count;
int cmp(const void *a,const void *b)
{
return strcmp((char *)a,(char *)b);
}
void init()
{
for(int i=0;i<30;i++)
{e[i][0].to=0;}
memset(indegree,0,sizeof(indegree));
memset(outdegree,0,sizeof(outdegree));
memset(vis,0,sizeof(vis));
count=m;top=0;
}
bool dfs(int u,int c)
{
if(c==count)
return true;
for(int i=1;i<=e[u][0].to;i++)
{
Node &E=e[u][i];
if(!vis[E.to])
{
vis[E.to]=1;
que[top++]=E.to;
if(dfs(next[E.to],c+1))
return true;
top--;
vis[E.to]=0;
}
}
return false;
}
int main()
{
int n;
int i;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
int l,r;
init();
for(i=0;i<m;i++)
{
scanf("%s",str[i]);
}
qsort(str,m,sizeof(str[0]),cmp);
for(i=0;i<m;i++)
{
l=str[i][0]-'a';
int t=++e[l][0].to;e[l][t].to=i;
r=strlen(str[i])-1;
next[i]=str[i][r]-'a';
outdegree[l]++;indegree[next[i]]++;
}
int flag=0;
for(i=0;i<26;i++)
if(indegree[i]!=outdegree[i])
flag++;
if(flag!=2&&flag!=0)
{
printf("***\n");
continue;
}
if(flag==2)
{
for(i=0;i<26;i++)
if(outdegree[i]-1==indegree[i])
{
dfs(i,0);
break;
}
}
else dfs(0,0);
if(top!=m)
{
printf("***\n");
continue;
}
for(i=0;i<top-1;i++)
printf("%s.",str[que[i]]);
printf("%s\n",str[que[top-1]]);
}
return 0;
}
阅读全文
0 0
- 作业 单词拼接
- 作业二十八 单词拼接
- 单词拼接
- 单词拼接
- 单词拼接
- 单词拼接
- 单词拼接
- 单词拼接 搜索
- NYOJ99 单词拼接
- nyoj 99 单词拼接
- NYOJ 99 单词拼接
- NYOJ 99 单词拼接
- NYOJ99 单词拼接
- nyoj99-单词拼接【欧拉图】
- NYOJ 单词拼接
- NYOJ 99 - 单词拼接
- NYOJ99单词拼接
- ACM单词拼接
- MFC picture 控件error RC2108: expected numerical dialog constant
- 为何要用番茄工作法(笔记)
- 03 Hiernate常见错误
- BZOJ 2744: [HEOI2012]朋友圈
- 正阅读微信小说分销系统-视频教程-1.渠道商-公众号配置-基础信息
- 作业 单词拼接
- Git学习记录<1>
- Maven(三)在Eclipse中使用Maven与Maven坐标
- Cocos-2dx 错误汇总
- LeetCode-237. Delete Node in a Linked List
- Linux进阶之 mkdir 命令
- 霍夫变换到广义霍夫变换
- 【51Nod1678】lyk与gcd
- 测试下MarkDown编辑器