题干:
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。地上画着一些格子,每个格子里写一个字,如下所示:
从我做起振
我做起振兴
做起振兴中
起振兴中华
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。 要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
答案是一个整数,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。
题目分析:
由题干可以得出,此题类似走迷宫,挑选一条路就不能回头,而且在走到终点前,每一格都只有向右或向下两种选择,因此可以将其简化成二叉树模型,每一条路都是走到底为止再选择其他路径,因此可以和树的结构特别相似(每一层都有两条路分叉)。
模型分析:
简化之后,就将路线的条数问题转化为树的路径问题,即树的遍历问题,那么我们就可以使用树的深度遍历搜索,递归算法。
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的区别是: