HDU

来源:互联网 发布:淘宝卖家如何修改地址 编辑:程序博客网 时间:2024/06/10 21:08
import java.util.*;public class Main {public LinkedList<Node> queue;public char[][][] mi;public boolean [][][]visit;public Main(int n,int m){mi=new char[2][m][n];visit=new boolean[2][m][n];this.queue=new LinkedList<Main.Node>();}public void setVal(int level,int i,int j,char c1){mi[level][i][j]=c1;}public class Node{int i;int j;int level;char c;int count;public Node(){}public Node(int level,int i,int j,int count) {this.level=level;this.i=i;this.j=j;this.c=mi[level][i][j];this.count=count;}public void visited(){visit[level][i][j]=true;}}public int bfs(int m,int n,int t){if(mi[0][0][0]=='P') return 0; Node n0=new Node(0,0,0,0);queue.add(n0);n0.visited();while(!queue.isEmpty()){Node tmp=queue.peek();queue.remove();if(tmp.c=='P') return tmp.count;int level=tmp.level;//碰到'#'传送们必传送,没有第二种选择if(tmp.c=='#' && tmp.level==0){level=1;}if(tmp.c=='#' && tmp.level==1){level=0;}//两边都是传送门时,或者一边是传送门一边是墙时,这两种情况是死路。if(level!=tmp.level && mi[level][tmp.i][tmp.j]=='#' || mi[level][tmp.i][tmp.j]=='*'){visit[level][tmp.i][tmp.j]=true;continue;}if(tmp.i+1<n && visit[level][tmp.i+1][tmp.j]!=true){Node n1=new Node(level,tmp.i+1,tmp.j,tmp.count+1);if(n1.c=='P') return n1.count;if(n1.c!='*') queue.add(n1);n1.visited();}if(tmp.i-1>=0 && visit[level][tmp.i-1][tmp.j]!=true){Node n2=new Node(level,tmp.i-1,tmp.j,tmp.count+1);if(n2.c=='P') return n2.count;if(n2.c!='*') queue.add(n2);n2.visited();}if(tmp.j+1<m && visit[level][tmp.i][tmp.j+1]!=true){Node n3=new Node(level,tmp.i,tmp.j+1,tmp.count+1);if(n3.c=='P') return n3.count;if(n3.c!='*') queue.add(n3);n3.visited();}if(tmp.j-1>=0 && visit[level][tmp.i][tmp.j-1]!=true){Node n4=new Node(level,tmp.i,tmp.j-1,tmp.count+1);if(n4.c=='P') return n4.count;if(n4.c!='*') queue.add(n4);n4.visited();}}return t+1;}public static void main(String[] args) {int c,m,n,t;Scanner cin=new Scanner(System.in);c=cin.nextInt();while(c-->0){n=cin.nextInt();m=cin.nextInt();t=cin.nextInt();Main main=new Main(n,m);for(int level=0;level<2;level++){//输入时要注意两张地图间有空行,要特殊处理。for(int i=0;i<n;i++){String s = cin.next();for(int j=0;j<m;j++){char c1=s.charAt(j);main.setVal(level, i, j, c1);}//System.out.println(s);}}//System.out.println(t);if(t<=main.bfs(m,n,t)){System.out.println("YES");}else{System.out.println("NO");}}}}

0 0
原创粉丝点击