题目
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示:
从我做起振
我做起振兴
做起振兴中
起振兴中华
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。
要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
解题思路
我们可以将这些写字的格子想象成网格,建立一个坐标系.仔细观察我们可以发现,只要走到右下角的"华"就达到要求了.即路线的总数为所在格子向下走的线路数和向右走的线路数的总和,当走到下边界或者右边界时,线路就已经确定了。我们可以使用深度优先搜索(DFS)算法进行解题,
代码
代码如下(示例):
public class 振兴中华 {
public static void main(String[] args) {
int res = DFS(0,0);
System.out.println(res);
}
public static int DFS(int i,int j){
if (i==3 || j==4){
return 1;
}
return DFS(i+1,j) + DFS(i,j+1);
}
}
总结
学会灵活运用DFS算法,递归算法,理解代码return DFS(i+1,j) + DFS(i,j+1);DFS(i + 1, j):向下走的路线总数,DFS(i, j+ 1):向右走的路线总数