小熊搬家问题

住在森林里的小熊要搬到新家。现可从控制台输入森林的地图,B表示小熊目前的家,H表示小熊的新家,-表示可以通过的路,#表示无法通过。要求根据输入的地图判断小熊能否到达新家。如果能,则输出“Y”,否则输出“N”。例如

输入:

1 //地图的行数

5 //地图的列数

-B-H#

输出:

Y


实际上这是一个典型的迷宫问题。本博客中之前的博文已有介绍。区别在于这里迷宫的入口和出口待定,且迷宫地图用字符而非整型数据表示,然而算法是一样的。下面为实现代码。

import java.util.Arrays;
import java.util.Scanner;
abstract class Main{
	public static char[][] maze = null;
	public static int bx, by, ex, ey, count = 0;
	public static int[][] state;
 	public static void main(String[] args){ 	
 		Scanner in = new Scanner(System.in);
 		int r = in.nextInt();
 		int c = in.nextInt();
 		maze = new char[r+2][c+2];
 		state = new int[r+2][c+2];
 		for(int i=0; i<maze.length; i++){
 			Arrays.fill(maze[i], '#');
 			Arrays.fill(state[i], 0);
 		}
 		for(int i=1; i<r+1; i++){
 			String s = in.next();
 			for(int j=1; j<c+1; j++){
 				maze[i][j] = s.charAt(j-1);
 				if(maze[i][j]=='B'){bx = i; by = j;}
 				if(maze[i][j]=='H'){maze[i][j] = '-'; ex = i; ey = j;}
 			}
 		}
 		in.close();
 		move(bx,by);
 		if(count<1){
 			System.out.println("N");
 		}
    }
 	
 	public static void move(int i, int j){
 		state[i][j] = 1;
 		if(i==ex&&j==ey){
 			count++;
 			System.out.println("Y");
 			return;
 		}
 		if(maze[i+1][j]=='-'&&state[i+1][j]==0){
 			move(i+1,j);
 		}
 		if(maze[i][j+1]=='-'&&state[i][j+1]==0){
 			move(i,j+1);
 		}
 		if(maze[i-1][j]=='-'&&state[i-1][j]==0){
 			move(i-1,j);
 		}
 		if(maze[i][j-1]=='-'&&state[i][j-1]==0){
 			move(i,j-1);
 		}
 		state[i][j] = 0;
 	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值