AC了但有疑惑
查看原帖
AC了但有疑惑
1179676
WayneLiu楼主2025/7/3 16:32
#include <bits/stdc++.h>
using namespace std;
int n, m, d[4][2] = {{-2, 1}, {-1, 2}, {1, 2}, {2, 1}}, vis[20][20], ans;
void dfs(int x, int y) {
	if (x == n && y == m) {
		ans++;
		return;
	}
	for (int i = 0; i < 4; i++) {
		if (x + d[i][0] >= 0  && x + d[i][0] <= n && y + d[i][1] >= 0 && y + d[i][1] <= m && !vis[x + d[i][0]][y + d[i][1]]) {
            vis[x + d[i][0]][y + d[i][1]] = true;
			dfs(x + d[i][0], y + d[i][1]); 
			vis[x + d[i][0]][y + d[i][1]] = false;
		}
	}
} 
int main() {
	cin >> n >> m;
	dfs(0, 0);
	cout << ans;
    return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, m, d[4][2] = {{-2, 1}, {-1, 2}, {1, 2}, {2, 1}}, vis[20][20], ans;
void dfs(int x, int y) {
	if (x == n && y == m) {
		ans++;
		return;
	}
	for (int i = 0; i < 4; i++) {
		if (x + d[i][0] >= 0  && x + d[i][0] <= n && y + d[i][1] >= 0 && y + d[i][1] <= m && !vis[x + d[i][0]][y + d[i][1]]) {
//			vis[x + d[i][0]][y + d[i][1]] = true;
			dfs(x + d[i][0], y + d[i][1]); 
//			vis[x + d[i][0]][y + d[i][1]] = false;
		}
	}
} 
int main() {
	cin >> n >> m;
	dfs(0, 0);
	cout << ans;
    return 0;
}

为什么第二段代码能AC第一段不能(我知道不必回溯,但不知道为什么不能回溯)

2025/7/3 16:32
加载中...