T.T 因为 vis[nx][ny]=1; 没加调了好久
果然自己还是太naive
其实刚开始因为struct 里面x,y 和输入的x,y重复导致自己卡了很久都不知道怎么cb怎么报错的 妈的我这种自己给自己挖坑。。唉。。。 其实所有题都有点bfs&dfs的味道 ,这种只是一种思想 后面还得看套路 ,你说有的题用bfsdfs肯定能做 但架不住正常人都用dp或者正常套路
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
#include <bitset>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <map>
#include <set>
#include<iomanip>
#include <bits/stdc++.h>
/***************************************/
#define ll long long
#define int64 __int64
#define PI 3.1415927
#define INF 1000000
const int maxn = 2010;
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;
struct node{
int x,y;
};
int vis[20][20];
int ans;
int n,m,nx,ny;
int dir[8][2]={{-2,1},{-2,-1},{-1,2},{-1,-2},{2,1},{2,-1},{1,2},{1,-2}};
void dfs(node cur,int cnt)
{
if(cnt==n*m)
{
ans++;return;
}
for(int i=0;i<8;i++)
{
node nx;nx.x=cur.x+dir[i][0];
nx.y=cur.y+dir[i][1];
if(nx.x<0||nx.x>=n||nx.y<0||nx.y>=m||vis[nx.x][nx.y])
continue;
vis[nx.x][nx.y]=1;
dfs(nx,cnt+1);
vis[nx.x][nx.y]=0;
}
}
int main()
{
int t;cin>>t;
while(t--)
{
memset(vis,0,sizeof(vis));
ans=0;
cin>>n>>m>>nx>>ny;
node st;
st.x=nx;st.y=ny;
vis[nx][ny]=1;
dfs(st,1);
cout<<ans<<endl;
}
return 0;
}