跳马问题(洛谷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;
}

  

posted @ 2022-03-19 14:40  帝皇の惊  阅读(163)  评论(0)    收藏  举报