n,m<=18。等等,半棋盘不是只有4行6列吗?算了,跟\(OI\)讲什么道理啊。#include<iostream>
using namespace std;
int dx[4]={2,-2,1,-1},dy[4]={1,1,2,2};//模拟坐标x,y的变化规律,四个情况对应四个走法
int sum,m,n;void dfs(int x,int y)//坐标X,Y
{
    if(x==n&&y==m)//当到达右上角(m,n)时,退出深搜
    {
        sum++;
        return;
    }
    else //否则模拟各种方向
        for(int i=0;i<=3;i++)
        {
            int tx=x+dx[i];
            int ty=y+dy[i];
            if(tx>=0&&tx<=n&&ty>=0&&ty<=m)//当没有超出边界时
                dfs(tx,ty);//继续DFS
        }       
}int main()
{
    cin>>n>>m;
    dfs(0,0);//从(0,0)位置开始寻找
    cout<<sum;
    return 0;
}#include<iostream>
using namespace std;
int dx[4]={2,-2,1,-1},dy[4]={1,1,2,2};
int sum,m,n;
void dfs(int x,int y)
{
    if(x==n&&y==m)
    {
        sum++;
        return;
    }
    else 
        for(int i=0;i<=3;i++)
        {
            int tx=x+dx[i];
            int ty=y+dy[i];
            if(tx>=0&&tx<=n&&ty>=0&&ty<=m)
                dfs(tx,ty);
        }           
}
int main()
{
    cin>>n>>m;
    dfs(0,0);
    cout<<sum;
    return 0;
}原文:https://www.cnblogs.com/clear-skies/p/12255281.html