杭电acm 1181 变形课 DFS

变形课

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 31348    Accepted Submission(s): 11299

Problem 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.

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

#include <iostream>
#include <queue>
#include <cstring>
#include<string.h>
using namespace std;

bool vis[1000];
char str[1000][1000];

bool bfs(int n)
{
    queue <int> que;
    int a, len;
    for(int i = 0; i < n; i++)    //先将首字母为b的入队
    {
        if(str[i][0] == ‘b‘)
        {
            que.push(i);
            vis[i] = true;//表示这个单词已经标记过了
        }
    }
    while(!que.empty())
    {
        a = que.front();
        que.pop();
        len = strlen(str[a]) - 1;//字符串的最后一个字符的位置
        if(str[a][len] == ‘m‘)    //该字符串最后为m,说明可以完成
            {
                return true;
            }
        for(int j = 0; j < n; j++)    //遍历所有字符串
        {

            if(!vis[j] && str[j][0] == str[a][len])  //将跟队列中的字符串的最后一个相同的字符串,并且没有入过队的入队
            {
                que.push(j);
                vis[j] = true;
            }
        }
    }
    return false;
}

int main()
{
    int i;
    i = 0;
    memset(vis,false,sizeof(vis));//初始化标记
    while(cin >> str[i])//因为有多组输入
    {
        i++;
        if(str[i - 1][0] == ‘0‘)//如果是0,一组数据结束,判断 ,初始化各数据
        {
            bool flag=bfs(i);
            if(flag)
                cout << "Yes." << endl;
            else
                cout << "No." << endl;
            i = 0;
            memset(vis,false,sizeof(vis));
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/fromzore/p/9783958.html

时间: 2024-10-12 08:02:15

杭电acm 1181 变形课 DFS的相关文章

HDU 1181 变形课(dfs)

变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 19655    Accepted Submission(s): 7063 Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一

HDU ACM 1181 变形课

使用深度优先搜索解决,很简单的题. 建立26个字母的邻接矩阵图和访问数组,从字母b开始搜索,若能到达字母m则可以变形. #include<iostream> using namespace std; int v[27]; int m[27][27]; bool dfs(int x) { if(x=='m'-'a') //搜到字母m结束 return true; for(int i=0;i<26;i++) { if(m[x][i]==1 && !v[i]) { v[i]=1

hdu 1181 变形课 (dfs)简单搜索

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1181 变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 17876    Accepted Submission(s): 6435 Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不

[ACM] hdu 1181 变形课

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

杭电ACM分类

杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY

杭电ACM题目分类

杭电ACM题目分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028. 1029.1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092. 1093.1094.1095.1096.1097.1098.1106.1108.1157.1163.1164.1170.1194.1196. 1197.1201.1202.1205.1219.1234.123

杭电ACM Java实现样例

若使用Java求解杭电ACM,答案提交必须注意两点: 1.类名一定得是Main,否则服务器无法编译: 2.必须用while进行输入判断. 以1000题测试题为例,代码如下: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(scan.hasNextInt()) { int a=scan.n

杭电ACM水仙花数

水仙花数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 96473    Accepted Submission(s): 28632 Problem Description 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: "水仙花数"是指一个三位数,它的各位数字的立方和等于其本身,比如:1

杭电 acm 2053 ( Switch Game )

这题思路: 一开始有n盏灯,且全部为关闭状态,都记为 0  就是  The initial condition :      0 0 0 0 0 … 然后之后进行i操作就是对这些灯以是否能被i整除,进行改变状态,如将 0 改为 1 或 将 1 改为 0 正如提醒里的 After the first operation :  1 1 1 1 1 … After the second operation : 1 0 1 0 1 … After the third operation :  1 0 0