题目传送门
https://www.luogu.com.cn/problem/P1644
这道题我们看标签可以知道这是一道搜索题目这里我用DFS讲一下:

图中马的走法是(i+1,j+2)(i+2,j+1),
但是题目中说不能往左走所有还有 (i-2,j+1)(i-1,j+2)样,一共4种走法。
因此我们便可以用递归依次遍历这4种走法。
dfss(x+1,y+2);
dfss(x+2,y+1);
dfss(x-2,y+1);
dfss(x-1,y+2);
当然递归最重要的是终止条件。
当马的位置到达了指定位置,便可以将记录到指定位置的方案数+1。
if(x == n && y == m){
cnt++;
return;
}
整体代码如下:
这里函数中的n,m指马的当前坐标。
#include <bits/stdc++.h>
using namespace std;
long long cnt = 0;
void dfss(int n,int m,int x,int y){
if(x < 0 || x > n || y > m || y < 0){
return;
}
if(x == n && y == m){
cnt++;
}else{
dfss(n,m,x+1,y+2);
dfss(n,m,x+2,y+1);
dfss(n,m,x-2,y+1);
dfss(n,m,x-1,y+2);
}
return;
}
int main(){
int n,m;
cin >> n >> m;
dfss(n,m,0,0);
cout << cnt;
return 0;
}
注意这里的cnt需要开long long 如何可以你能给我点一个赞吗谢谢。
(希望对你有帮助)
788

被折叠的 条评论
为什么被折叠?



