码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1181——变形课(BFS or DFS)

时间:2015-05-23 23:54:42      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

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;
                }
            }
        }
    }
}

 

HDU1181——变形课(BFS or DFS)

标签:

原文地址:http://www.cnblogs.com/Yvettey-me/p/4525102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!