zoukankan      html  css  js  c++  java
  • 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;
                    }
                }
            }
        }
    }
  • 相关阅读:
    C#使用xpath简单爬取网站的内容
    Python的安装以及编译器的安装
    解析二维码
    C#的历史及IDE总结
    我又回来了,这回是带着C++来的
    Python 基础知识
    template declarations(模板声明)中 class 和 typename 有什么不同?
    投影点坐标
    内存对齐代码解析
    互斥量和信号量的区别
  • 原文地址:https://www.cnblogs.com/Yvettey-me/p/4525102.html
Copyright © 2011-2022 走看看