题322.dfs搜索顺序-acwing-Q1116-- 马走日
一、题目
二、题解
#include <bits/stdc++.h>
using namespace std;
const int maxn=10;
const int dx[]={-1,-1,-2,-2,1,1,2,2};
const int dy[]={-2,2,-1,1,-2,2,-1,1};
int n,m,sx,sy;
int vis[maxn][maxn];
int ans;
void dfs(int x,int y,int cnt)
{
if(cnt==n*m)
{
ans++;
return;
}
for(int i=0;i<8;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(nx<0||nx>=n||ny<0||ny>=m)
{
continue;
}
if(vis[nx][ny])
{
continue;
}
vis[nx][ny]=1;
dfs(nx,ny,cnt+1);
vis[nx][ny]=0;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n>>m>>sx>>sy;
ans=0;
vis[sx][sy]=1;
dfs(sx,sy,1);
vis[sx][sy]=0;
cout<<ans<<endl;
}
}