蓝桥杯Java真题01--振兴中华

题干:

小明参加了学校的趣味运动会,其中的一个项目是:跳格子。地上画着一些格子,每个格子里写一个字,如下所示:

从我做起振
我做起振兴
做起振兴中
起振兴中华

比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。 要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?

答案是一个整数,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。

题目分析:

由题干可以得出,此题类似走迷宫,挑选一条路就不能回头,而且在走到终点前,每一格都只有向右或向下两种选择,因此可以将其简化成二叉树模型,每一条路都是走到底为止再选择其他路径,因此可以和树的结构特别相似(每一层都有两条路分叉)。

模型分析:

这是简化出来的模型,下面还有很多没有表现出来
简化之后,就将路线的条数问题转化为树的路径问题,即树的遍历问题,那么我们就可以使用树的深度遍历搜索,递归算法。

public class 振兴中华 {
	public static void main(String[] args) {
		int re = findPath(0,0);
		System.out.println(re);
	}

	private static int findPath(int i, int j) {
		if(i==4 || j==3) {
			return 1;
		}
		return findPath(i+1, j) + findPath(i, j+1);
		
	}
}

总结:

代码非常简洁,重点是学会利用数据结构简化模型,顺便提一嘴,此题用的是DFS,树的两种遍历DFS,BFS的区别是:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值