跳马问题(洛谷P1644)
前言&吐槽
这道题用DFS很好做,唯一需要注意的是你正在下中国象棋,所以马是不能够向上向下走的,只能斜着走。
题目描述

算法设计
使用DFS搜下去就行了
void DFS(){
if(满足条件):
...
return;
if(选择一种分支):
DFS()
if(另一种):
DFS()
}
代码实现
#include <iostream>
using namespace std;
int sum = 0, n, m;
void dfs(int row, int column)
{//棋盘上的马已经限定了向右行走,所以只有四种情况
if (row == m && column ==n)
{
sum++;
}
if (row + 1 <= m && column + 2 <= n)
{
dfs(row + 1, column + 2);
}
if (row + 1 <= m && column - 2 >= 0)
{
dfs(row + 1, column - 2);
}
if (row + 2 <= m && column + 1 <= n)
{
dfs(row + 2, column + 1);
}
if (row + 2 <= m && column - 1 >= 0)
{
dfs(row + 2, column - 1);
}
}
int main()
{
cin >> n >> m;
dfs(0, 0);
cout << sum;
}

浙公网安备 33010602011771号