我好像个**,这题都不会做!
2026-03-28 20:27:35
发布于:浙江
A137.马走日
为你们增加智慧
#include <iostream>
using namespace std;
int a[10][10];
int n,m,x,y,count=0;
int fd[2][8]={
{-2,-2,-1,-1,1,1,2,2},
{1,-1,2,-2,2,-2,1,-1}
};
int step=0;
void dfs(int h,int l){
if(step==n*m){
count++;
}else{
//zou
for(int i=0;i<8;i++){
int nh,nl;
nh = h+fd[0][i];
nl = l+fd[1][i];
if(a[nh][nl]==0&&nh>=0&&nh<n&&nl>=0&&nl<m){
a[nh][nl]=1;
step++;
dfs(nh,nl);
a[nh][nl] = 0;
step--;
}
}
}
}
int main(){
int t;
cin >> t;
for(int i=0;i<t;i++){
cin >> n >> m >> x >> y;
a[x][y] = 1;
step++;
dfs(x,y);
}
cout << count;
return 0;
}

截我图不点赞的是gay / 拉
全部评论 2
我是gay我是gay!
2026-03-28 来自 浙江
1#include <bits/stdc++.h> using namespace std; int T, n, m, sx, sy, ans; bool a[15][15]; void dfs(int x, int y, int cnt) { if (x < 0 || y < 0 || x >= n || y >= m || a[x][y]) return; if (cnt == n * m) { ans++; return; } a[x][y] = true; dfs(x + 1, y + 2, cnt + 1); dfs(x + 1, y - 2, cnt + 1); dfs(x + 2, y + 1, cnt + 1); dfs(x + 2, y - 1, cnt + 1); dfs(x - 1, y + 2, cnt + 1); dfs(x - 1, y - 2, cnt + 1); dfs(x - 2, y + 1, cnt + 1); dfs(x - 2, y - 1, cnt + 1); a[x][y] = false; } int main() { cin >> T; while (T--) { ans = 0; memset(a, false, sizeof(a)); cin >> n >> m >> sx >> sy; dfs(sx, sy, 1); cout << ans << endl; } return 0; }2026-03-28 来自 浙江
1
有更快的解答吗?
2026-03-28 来自 浙江
1如果说的是常数更优广搜/剪枝,复杂度优化打你的表去
2026-03-28 来自 广东
1
























有帮助,赞一个