HDU1181

来源:互联网 发布:淘宝seo搜索优化工具 编辑:程序博客网 时间:2024/06/05 10:59

变形课

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

先把这堆东西头尾提取出来,然后丢到邻接矩阵里。就那么深搜

#include<stdio.h>#include<string.h>int dfs(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(dfs(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(dfs(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
原创粉丝点击