马走日-深搜回溯-超好懂题解
马在中国象棋以日字形规则移动。
请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。
Input
第一行为整数T(T < 10),表示测试数据组数。
每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10)
Output
每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。
Sample
Inputcopy |
Outputcopy |
1 5 4 0 0 |
32 |
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,t,tot,ans,x,y;
int vis[15][15];
int px[15]={1,1,2,2,-1,-1,-2,-2};
int py[15]={2,-2,1,-1,2,-2,1,-1};
void bfs(int x,int y,int tot)
{if(tot==n*m)
{ans++;
return;
}
for(int i=0;i<8;i++)
{
int a=x+px[i];
int b=y+py[i];
if(a>=0&&a<n&&b>=0&&b<m&&!vis[a][b])//0开始,所以要小于n.
{vis[x][y]=1;//x,y的原因是,出发的那步被标记,因为出发和落脚成功了,出发点才算。
bfs(a,b,tot+1);
vis[x][y]=0;
}
}}
int main()
{cin>>t;
while(t--)
{cin>>n>>m>>x>>y;
bfs(x,y,1);
cout<<ans<<endl;
ans=0;
}
}
马走日-深搜回溯-超好懂题解相关推荐
- 百练_4123 马走日(深搜)
描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. 输入 第一行为整数T ...
- Openjudge 8465 马走日
马走日 链接 经典回溯题目 给出棋盘和初始坐标 问这个马有多少种方法遍历整个棋盘 思路 从初始点开始遍历每一个方向 并查看新点有没有被遍历过 如果没有就走出一步并在这一步继续搜 搜完需要回溯(恢复搜 ...
- 马走日(深搜 C++)
马走日 总时间限制: 1000ms 内存限制: 1024kB 描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点, ...
- 马走日(DFS深搜)
马走日 目录 马走日 题意描述:给多组数据,给棋盘的大小和马的初始位置,求有多少种方法让马走日全部走过棋盘,不能重复走棋盘的同一个点 解题思路:利用数组来对所有的棋盘上所有的点初始化表示未走过,把马的 ...
- 【密码岛OJ】1753 马走日题解
作为一名密码岛码农,出道深搜 马走日是一道典型的深搜题,主要找准方向再判断日字形就完了 上代码 第一次写题解 不是很熟练 马走日的主要思路就是先定义两个方向数组,然后开一个dfs 求累加和 如果属于日 ...
- 信息学奥赛一本通(1219:马走日)
1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 12078 通过数: 6316 [题目描述] 马在中国象棋以日字形规则移动. 请编写一段程 ...
- GDUT - 专题学习1 C - 马走日
C - 马走日 题目 马在中国象棋以日字形规则移动. 请编写一段程序,给定 n×m 大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. ...
- 马走日的解法(dfs)
马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. Input 第一行为整数T ...
- 算法提高课-搜索-DFS之搜索顺序-AcWing 1116. 马走日:dfs
题目分析 来源:acwing 分析: dfs分两类,一类是内部搜索,不需要恢复现场:一类是外部搜索(以整个图作为状态),需要恢复现场.这里的马走日就是状态图,需要恢复现场. 理清dfs,需要画一个搜索 ...
最新文章
- 解决微信H5获取SDK授权报错提示errMsg: “config:fail,Error: 系统错误,错误码:63002,invalid signature [20200908 22:17:17][]“
- python codecs模块
- Python的map方法的应用
- vs code 添加jquery的智能提示
- oracle学习--循环语句
- catia中sew的用法_CATIA超级副本(PowerCopy)使用方法总结 | 坐倚北风
- Flink – JobManager.submitJob
- 能提升你的东西,都不在舒适区
- sql server 与 oracle 的不同,第一感觉。
- Oracle分页查询与RowNum
- Illegal characters found in URL
- 2009年:国内常见的PKM工具软件介绍
- 【嵌入式】基于SPI的M8266WIFI模块调试
- DB2新建用户及数据库过程
- root 存档位置 linux,Linux 档案与目录管理(转)
- 计算机网络知识点及例题总结(五)数据链路层与局域网
- [转]solaris 10 使用手册
- 普通的程序员每天都做什么,资深程序员带你了解行业内幕
- pika详解 (一)
- VHDL设计一个同步清零的JK触发器