其他分享
首页 > 其他分享> > 1098: PIPI的变形课(bfs搜索)

1098: PIPI的变形课(bfs搜索)

作者:互联网

题目描述

变形课上PIPI碰到了一点小麻烦,因为他并不能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.
PIPI已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse)。

输入

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

输出

如果PIPI可以完成他的作业,就输出"Yes.",否则就输出"No."

样例输入

so
soon
river
goes
them
got
moon
begin
big
0

样例输出

Yes.
提示
PIPI 可以念:这个咒语:“big-got-them”.

思路:

隐式搜索题 建立邻接表后用bfs搜索

#include<bits/stdc++.h>
using namespace std;
const int N=50;
vector<int>vec[N];
char str[N];
bool vis[N];
bool bfs(int s,int t)
{
    queue<int>q;
    vis[s]=1;
    q.push(s);
    while(q.size())
    {
        int newx=q.front();
        if(newx==t)
            return true;
        q.pop();
        for(int i=0;i<vec[newx].size();i++)
        {
            int next=vec[newx][i];
            if(!vis[next]){
                vis[next]=1;
                q.push(next);
            }
        }
    }
    return false;
}
main()
{
    while(scanf("%s",str)!=EOF)
    {
        for(int i=0;i<26;i++)
            vec[i].clear();
        memset(vis,0,sizeof(vis));
        vec[str[0]-'a'].push_back(str[strlen(str)-1]-'a');
        while(scanf("%s",str)!=EOF)
        {
            if(!strcmp(str,"0")) break;
            vec[str[0]-'a'].push_back(str[strlen(str)-1]-'a');
        }
    if(bfs('b'-'a','m'-'a')) printf("Yes.\n");
    else printf("No.\n");
    }
}

虱子555 发布了36 篇原创文章 · 获赞 7 · 访问量 1358 私信 关注

标签:输出,int,1098,bfs,单词,咒语,PIPI
来源: https://blog.csdn.net/weixin_44433678/article/details/104175926