问题 K: 【递归与递推】骑士游历问题
题目:
设有一个m*n的棋盘(2≤m≤50,2≤n≤50),在棋盘上任一点有一个中国象棋“马”,马走的规则为:马走日字;马只能向右走。当m,n给出后,同时给出马起始的位置和终点的位置,试找出从起点到终点所有路径的数目。
输入
m,n,xl,yl,x2,y2(分别表示棋盘大小、起点坐标和终点坐标)。
输出
路径数目(若不存在,则输出0)。
思路:
同样的,思路和上一题很类似,使用记忆话搜索,但是存在一个问题:地图上从起点开始有很多点达不到,从终点回溯到起点的过程,可能会进过这些点,然后就会重复搜索,所以我们需要在一个点(x,y)搜索完了,若其dp[x][y]仍旧=0,将其置为-1;这样可以防止重复搜索这个点,或者使用visit[ ][ ]数组也行
注意:
我一开始没考虑到一个点达不到,然后重复搜索的情况,T了
#include <iostream>
using namespace std;
int n,m,sx,sy,ex,ey;
long long dp[55][55]={
0};
int Y