POJ-2251 Java实现

public class POJ2251{
	static int startX = 0;
	static int startY = 0;
	static int startZ = 0;
	static int l;
	static int r;
	static int c;
	private static int[][] directions = {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		while(true) {
		l = scanner.nextInt();
		r = scanner.nextInt();
		c = scanner.nextInt();
		if(l == 0 && r == 0 && c == 0) {
			System.out.println("end");
			return;
			}

		char[][][] chars = new char[l][r][c];
		int[][][] visits = new int[l][r][c];//0:unvisited 1:visited
		for(int i = 0;i < l; i++) {
			for(int j = 0;j < r; j++) {
					chars[i][j] = scanner.next().toCharArray();
					for(int k = 0; k < chars[i][j].length; k++) {
						if(chars[i][j][k] == 'S') {
							startX = i;
							startY = j;
							startZ = k;
							}
						}
				}
		
			}	
		
		bfs(chars, visits);
		}
	
	}

private static void bfs(char[][][] chars, int[][][] visits) {
	Point point = new Point(startX, startY, startZ, 0);
	Queue<Point> points =  new LinkedList<>();
	points.add(point);
	visits[startX][startY][startZ] = 1;
	while(!points.isEmpty()){
		Point poll = points.poll();
		//exit
		if(chars[poll.getX()][poll.getY()][poll.getZ()] == 'E') {
			System.out.println("Escaped in " + poll.getMinutes() + " minute(s).");
			return;
		}
	for(int i = 0; i < 6; i++){
		int x = poll.getX() + directions[i][0];
		int y = poll.getY() + directions[i][1];
		int z = poll.getZ() + directions[i][2];
		if (x < l && x >= 0
				&& y < r && y >= 0
				&& z < c && z >= 0
				&& chars[x][y][z] != '#'
				&& visits[x][y][z] == 0) {
				Point temp = new Point(x, y, z, poll.getMinutes() + 1);
				points.add(temp);
				visits[x][y][z] = 1;
		}
		
	}

	}

	System.out.println("Trapped!");
	}
	static class Point{
		private int x;
		private int y;
		private int z;
		private int minutes;
		Public Point(int x, int y, int z, int minutes){
			this.x = x;
			this.y = y;
			this.z = z;
			this.minutes = minutes;
		}
		public int getX(){return x;}
		public int getY(){return y;}
		public int getZ(){return z;}
		public int getMinutes(){return minutes;}
		}

}

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值