题目

acwing1116. 马走日

题解

#include<iostream>
#include<cstring>
using namespace std;
const int N=10;
int k,n,m,x,y;
bool st[N][N];
int dx[8]={-2,-1,1,2,2,1,-1,-2},dy[8]={-1,-2,-2,-1,1,2,2,1};
int ans;
void dfs(int x,int y,int cnt){
    if(cnt==n*m){
        ans++;
        return;
    }
    st[x][y]=true;
    for(int i=0;i<8;i++){
        int a=x+dx[i],b=y+dy[i];
        if(a<0||a>=n||b<0||b>=m)continue;
        if(st[a][b])continue;
        dfs(a,b,cnt+1);
    }
    st[x][y]=false;
}
int main(){
    cin>>k;
    while(k--){
        ans=0;
        cin>>n>>m>>x>>y;
        dfs(x,y,1);
        cout<<ans<<endl;
        
    }
    
    return 0;
}