HDU 1181 变形课

来源:互联网 发布:php颜色代码 编辑:程序博客网 时间:2024/06/10 16:42

变形课

Problem Description
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.
Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
 
Input
测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.

Output
如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)
 
Sample Input
sosoonrivergoesthemgotmoonbeginbig0
 
Sample Output
Yes.

经典深搜题,便于深搜初学者理解。把所有单词首尾存到一个二维数组里,然后建邻接矩阵标记,深搜求是否有解。

#include<stdio.h>#include<string.h>int deep(int s[100][100],int c[100],int k,char b[100][3]){    int j;    c[k]=1;    for(j=0; j<100; j++)    {        if(s[k][j]==1&&c[j]==0)        {            if(b[j][1]=='m')            return 1;            else if(deep(s,c,j,b))            return 1;        }    }    return 0;}int main(){    int e,k;    char a[100][100],b[100][3],ch;    int i,j,an,c[100],s[100][100];    memset(a,'2',sizeof(a));    memset(b,'2',sizeof(b));    while(scanf("%s",a[0])!=EOF)    {        for(i=1; i<100; i++)        {            scanf("%s",a[i]);            if(a[i][0]=='0')                break;        }        for(i=0; i<100; i++)        {            an=strlen(a[i]);            b[i][0]=a[i][0];            b[i][1]=a[i][an-1];        }        memset(s,0,sizeof(s));        for(i=0; i<100; i++)            for(j=0; j<100; j++)            {                if(b[i][1]==b[j][0])                    s[i][j]=1;                else                    s[i][j]=0;            }        e=0;        memset(c,0,sizeof(c));        for(i=0; i<100; i++)        {            if(b[i][0]=='b')            {                if(b[i][1]=='m')                {                    e=1;                    break;                }                k=i;                if(deep(s,c,k,b))                {                    e=1;                    break;                }            }        }        if(e==1)            printf("Yes.\n");        else            printf("No.\n");        memset(a,'2',sizeof(a));        memset(b,'2',sizeof(b));    }    return 0;}

2 0
原创粉丝点击