这是按题意做的,不知道能通过不。(按题意的例子已通过,要发邮件注册就免了)
程序代码:
程序代码:#include <stdio.h>
#include <stdlib.h>
struct node
{
int next;
char *p;
};
int find(node *p,int dp,int l)
{
int i,j;
char a;
for(i=0,j=0;i<l;i++)if(p[i].next >=0)j++;;
if(j==l-1)return 1; //如果连成串则返回
for(i=0;p[dp].p[i];i++);
a=p[dp].p[i-1]; //找到字符串尾部字符
for(i=0;i<l;i++)
{
if(i!=dp&&p[i].next <0&&p[i].p[0]==a)
{
p[dp].next =i;
if (find(p,i,l))return 1;
else p[dp].next =-1;
}
}
return 0;
}
void main()
{
int i,j,n,t;
char a[1000],*pp;
node *p;
for(t=0,scanf("%d",&t);t>0;t--)
{
if(scanf("%d",&n))
{
if(n>0)
{
p=(node*)malloc(sizeof(node)*(n+1)); //申请指针空间
for(i=0;i<n;i++)
{
scanf("%s",a);
for(j=0;a[j];j++);
p[i].p=(char*)malloc(j+1); //申请字符串空间
for(;j>=0;j--)p[i].p[j]=a[j]; //拷贝字符串到堆中
p[i].next =-1;
}
for(i=0;i<n;i++)if(find(p,i,n))break;;
if(i==n)
printf("The door cannot be opened.\n");
else
printf("Ordering is possible.\n");
for(i=0;i<n;i++)free(p[i].p); //释放字符串堆空间
free(p); //释放指针空间
}
}
}
}
能编个毛线衣吗?




