马走日-dfs

马在中国象棋以日字形规则移动。

请编写一段程序,给定n×m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。


  • 马能走的方向不是4个(上下左右),而是8个。
  • 有多组数据!!!
  • x,y下标均从0开始

#include<bits/stdc++.h>
using namespace std;
bool vis[15][15];
int ans=0;
int h,l;
int dx[]= {-1,-2,-2,-1,1,2,2,1};
int dy[]= {-2,-1,1,2,2,1,-1,-2};
void dfs(int x,int y,int dep) {
if(dep==h*l) {
ans++;
return;
}
for(int i=0; i<8; i++) {
int x2=x+dx[i];
int y2=y+dy[i];
if(x2<0 || x2>h-1 || y2<0 || y2>l-1) continue;
if(vis[x2][y2]) continue;
vis[x2][y2]=1;
dfs(x2,y2,dep+1);
vis[x2][y2]=0;
}
}
int main () {
int T;
cin>>T;
while(T--) {
int x,y;
cin>>h>>l>>x>>y;
memset(vis,0,sizeof vis);
ans=0;
vis[x][y]=1;
dfs(x,y,1);
cout<<ans<<endl;
}
return 0;
}

 

posted on   可爱楷玩算法  阅读(45)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示