题目:
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示:(也可参见下图)从我做起振
我做起振兴
做起振兴中
起振兴中华比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。
要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?思路:
DFS;递归深度为一句话的汉字个数,在当前格子下有两种选择,向右走or向下走,
递归出口为走到带有“华”字的格子。答案:35
#include<iostream> using namespace std; int s = 0; int f(int x,int y) { if (x == 3&& y == 4)//满足条件 到达“华”字 { s++; return 1;//计数加1 } if (x + 1 <= 3 && y + 1 <= 4)//坐标小于或者等于底边和右边时(没有超界) return f(x + 1, y) + f(x, y + 1); else if (x + 1 >= 4 && y + 1 >=5)//两坐标都超界 return 0; else { if (x + 1 == 4)//x轴到达界限 return f(x, y + 1); if (y + 1 == 5)//y轴到达界限 return f(x + 1, y); } } int main() { cout << f(0,0)<<endl; cout << s; system("pause"); return 0; }