HDU1181——变形课(BFS or DFS)

http://acm.hdu.edu.cn/showproblem.php?pid=1181

这道题可以用多种方法写,我用了两种方法,都是用java写的。

BFS

注意java中使用的queue接口是需要实例化为LinkedList,

queue接口的方法有:

add        增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
element  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
offer       添加一个元素并返回true       如果队列已满,则返回false
poll         移除并返问队列头部的元素    如果队列为空,则返回null
peek       返回队列头部的元素             如果队列为空,则返回null

package oldPro;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class P11 {
    private static String G[];
    private static int[]vis;
    private static int len,now,flag;
    private static Queue<Integer> que=new LinkedList<Integer>();
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        G=new String[10001];
        while(input.hasNext()){
            int t=0;
            while(!(G[t]=input.next()).equals("0")){
                t++;
            }
            len=t;flag=0;
            vis=new int[t];
            for(int i=0;i<len;i++){
                if(G[i].charAt(0)==‘b‘){
                    now=i;
                    bfs();
                    if(flag==1)break;
                }
            }
            if(flag==1)System.out.println("Yes.");
            else System.out.println("No.");
        }
    }
    private static void bfs() {
        que.add(now);
        while(!que.isEmpty()){
            int k=que.poll();
            if(G[k].charAt(G[k].length()-1)==‘m‘){
                flag=1;
                break;
            }
            vis[k]=1;
            for(int i=0;i<len;i++){
                if(vis[i]==1)continue;
                if(G[k].charAt(G[k].length()-1)==G[i].charAt(0)){
                    if(G[i].charAt(G[i].length()-1)==‘m‘){
                        flag=1;
                        break;
                    }else{
                        que.add(i);
                        vis[i]=1;
                    }
                }
            }
            if(flag==1)break;
        }
    }
}

DFS

package oldPro;

import java.util.Scanner;

public class P1 {
    private static int len,vis[],flag,result;
    private static String[] G;
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        G=new String[10001];
        vis=new int[10001];
        while(input.hasNext()){
            int t=0;
            while(!(G[t]=input.next()).equals("0")){
                t++;
            }
            for(int i=0;i<t;i++){
                vis[t]=0;
            }
            len=t;
            flag=0;
            result=0;
            for(int i=0;i<len;i++){
                if(G[i].charAt(0)==‘b‘){
                    dfs(0,i);
                    if(flag==1)
                        break;
                }
            }
            if(result==1)System.out.println("Yes.");
            else System.out.println("No.");
        }
    }
    private static void dfs(int t, int k) {
        if(flag==1)return;
        if(t<=len &&G[k].charAt(G[k].length()-1)==‘m‘){
            flag=1;
            result=1;
            return;
        }else if(t==len){
            flag=1;
            return;
        }else{
            for(int i=0;i<len;i++){
                if(G[k].charAt(G[k].length()-1)==G[i].charAt(0)){
                    vis[i]=1;
                    dfs(t+1,i);
                    vis[i]=0;
                }
            }
        }
    }
}
时间: 2024-12-12 12:30:44

HDU1181——变形课(BFS or DFS)的相关文章

HDU1181:变形课 【dfs】

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

hdu1181 变形课(vector容器+dfs)

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

变形课hd1181(DFS)

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

hdu1181 变形课

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

hdu1181 bfs搜索之变形课

原题地址 这道题数据据说比较水,除了第一组数据是Yes以外,其余都是No,很多人抓住这点就水过了.当然了,我觉得那样过了也没什么意思.刷oj刷的是质量不是数量.这道题从题目上来看是个不错的 搜索题,解法多种多样,有 dfs,bfs,并查集,dijkstra算法都能解决. 题目分析: 题目中给了很多字符串,但是关心的只是字符串的第一个和最后一个字符.咋看起来,貌似是要建立一个个字符间的"映射",其实不然,这其实可以转化为一张26*26的有向图.有最多26个结点,原先的字符间映射关系就转化

HDU 1181.变形课【DFS(BFS也可以的)】【问题的转化】【8月5】

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

变形课(DFS hdu 1181)

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

变形课 HUD杭电1181 【DFS】

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

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那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一