#include <iostream>
#include<math.h>
#include <stdio.h>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <string>
#include <vector>
using namespace std;
int dir[2][2] = {{1, 0}, {0, 1}}, ans = 0;
int m, n;
int a, b;
void dfs(int x, int y) {
if (x == n && y == m) {
ans++;
return;
}
for (int i = 0; i < 2; i++) {
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if(nx>n||nx<0||ny>m||ny<0) {continue;return;}
if (nx == a - 2 && ny == b - 1) {continue;return;}
if (nx == a + 1 && ny == b - 2) {continue;return;}
if (nx == a + 1 && ny == b + 2) {continue;return;}
if (nx == a && ny == b) continue;
if (nx == a - 2 && ny == b + 1) continue;
if (nx == a - 1 && ny == b + 2) continue;
if (nx == a - 1 && ny == b - 2) continue;
if (nx == a + 2 && ny == b - 1) continue;
if (nx == a + 2 && ny == b + 1) continue;
dfs(nx, ny);
}
}
int main() {
scanf("%d %d %d %d",&n,&m,&a,&b);
dfs(0,0);
printf("%d",ans);
return 0;
}
第一次尝试dfs,就是直接搜路径,但超时了,在此基础上有什么优化的方法吗?