跳马问题
题目背景
在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧……
题目描述
中国象棋半张棋盘如图 \(1\) 所示。马自左下角 \((0,0)\) 向右上角 \((m,n)\) 跳。规定只能往右跳,不准往左跳。比如图 \(1\) 中所示为一种跳行路线,并将路径总数打印出来。
输入格式
只有一行:两个数 \(n\),\(m\)。
输出格式
只有一个数:总方案数 \(total\)。
样例 #1
样例输入 #1
4 8
样例输出 #1
37
提示
对于 \(100\%\) 的数据:\(n, m\leq 18\)
代码:
#include<iostream>
using namespace std;
int n, m,ans;
int g[20][20];
int dx[4] = { 2,1,-1,-2 };
int dy[4] = { 1,2,2,1 };
void dfs(int x, int y) {
if (x == n && y == m) { ans++; return; }
for (int i = 0; i < 4; i++) {
int a = x + dx[i];
int b = y + dy[i];
if (a<0 || a>n || b<0 || b>m) continue;
dfs(a, b);
}
}
int main()
{
cin >> n >> m;
dfs(0, 0);
cout << ans;
return 0;
}
标签:洛谷,int,dy,样例,dfs,P1644,跳马,题目
From: https://www.cnblogs.com/xkgc/p/18466194