Hdu 1181 变形课

 

题意:Harry上变形课,如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体。给你一张单词表,问你能否将B(Ball)转换为M(Mouse)。

 

思路:以单词词头,词尾为顶点建图,通过Floyd判断是否连通就行。

CODE:

 

#include <iostream>
#include <cstdio>
#include <cstdlib>
using  namespace std;

const  int M =  1001;
int G[M][M];
void Floyd()
{
     for( int k =  ' a '; k <=  ' z '; k++)
     for( int i =  ' a '; i <=  ' z '; i++)
         for( int j =  ' a '; j <=  ' z '; j++)    G[i][j] = G[i][j] || (G[i][k] && G[k][j]);
}

int main()
{
     char str[ 1001];
    memset(G,  0sizeof(G));
     while(~scanf( " %s ", str))
    {
         if(!strcmp( " 0 ", str))
        {
            Floyd();
             if(G[ ' b '][ ' m '] ==  1)
            {
                printf( " Yes.\n ");
            }
             else printf( " No.\n ");
            memset(G,  0sizeof(G));
        }
         else
        {
             int len = strlen(str);
            G[str[ 0]][str[len- 1]] =  1;
        }
    }
     return  0;
}

 

你可能感兴趣的:(HDU)