题意: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;
}

 

posted on 2012-09-20 21:38  有间博客  阅读(202)  评论(0编辑  收藏  举报