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