变形课 (dfs)

Description

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

Input

测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.

Output

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

Sample Input

 

so soon river goes them got moon begin big 0

Sample Output

 

Yes.

Hint

Hint  Harry 可以念这个咒语:"big-got-them".
        

emmmm说实话这题并不知道为什么要开标记 但是dfs几乎都有怎么个步骤 第一次 时间超限了 因为没有判断读到文件尾结束 我做dfs用的都是递归思想 因为栈学的实在不好  这题要注意的是其实判断只是开头字母和最后一个字母 所以把他们存在二维数组 

#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
char a[100][2];
int v[100];
int dfs(int n,int j)
{
    int i;
    if(a[j][1]=='m')
        return 1;
    for(i=0; i<n; i++)
    {
        if(a[i][0]==a[j][1]&&v[i]!=1)
        {
            v[i]=1;
            if(dfs(n,i))
                return 1;
        }
    }
    return 0;
}
int main()
{
    char b[1000];
    int str;
    int n,i=0,j;
    while((scanf("%s",b))!=EOF)
    {
       memset(v,0,sizeof(v));
        i=0;
         if(strcmp(b,"0")!=0)
            {
                n=strlen(b);
                a[i][0]=b[0];
                a[i][1]=b[n-1];
                i++;
            }
          if(strcmp(b,"0")==0)
                continue;
        while(1)
        {
            scanf("%s",b);
            if(strcmp(b,"0")!=0)
            {
                n=strlen(b);
                a[i][0]=b[0];
                a[i][1]=b[n-1];
                i++;

            }
            if(strcmp(b,"0")==0)
            {
                for(j=0; j<i; j++)
                {
                    if(a[j][0]=='b')
                    {
                        v[j]=1;
                        str=dfs(i,j);
                        if(str==1)
                        {
                            cout<<"Yes."<<endl;
                            break;
                        }
                    }
                }

                if(j==i&&str==0)
                {
                    cout<<"No."<<endl;
                    break;
                }
            }
        }
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_39654987/article/details/81353634
dfs