蒟蒻60分求助,三四个测试点TLE
查看原帖
蒟蒻60分求助,三四个测试点TLE
1286047
Doshe楼主2024/7/26 23:32
#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,就是直接搜路径,但超时了,在此基础上有什么优化的方法吗?

2024/7/26 23:32
加载中...