描述
在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(100*100)的围棋盘上任选两点A、B,A点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左上角坐标为(1,1)的点时,谁获胜。现在他请你帮忙,给你A、B两点的坐标,想知道两个位置到(1,1)点可能的最少步数

输入
输入A、B两个点的坐标
输出
输出A、B到达(1,1)的最少步数
样例输入
12 16
18 10
样例输出
8
9
一种是自己写的模拟队列

#include<bits/stdc++.h>
using namespace std;
int dir[12][2]= {{-2,-1},{-2,-2},{-1,-2},{1,-2},{2,-2},{2,-1},{2,1},{2,2},{1,2},{-1,2},{-2,2},{-2,1}};
struct node
{int x;int y;int s;
} q[1010];
bool vis[110][110];
void bfs(int a,int b,int c,int d)
{bool f=0;memset(vis,0,sizeof(vis));int head=1,tail=2;q[1].x=a;q[1].y=b;q[1].s=0;vis[a][b]=1;while(head<tail){int xx=q[head].x;int yy=q[head].y;int ss=q[head].s+1;for(int i=0; i<12; i++){int xn=xx+dir[i][0];int yn=yy+dir[i][1];if(xn>0&&xn<=100&&yn>0&&yn<=100&&!vis[xn][yn]){q[tail].x=xn;q[tail].y=yn;q[tail].s=q[head].s+1;vis[xn][yn]=1;tail++;if(xn==c&&yn==d){cout<<ss<<endl;f=1;break;}//cout<<'p'<<xn<<" "<<yn<<" "<<ss<<endl;}}head++;if(f) break;}
}
int main()
{int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;bfs(1,1,x1,y1);bfs(1,1,x2,y2);return 0;
}

另一个是老师写的队列

#include<bits/stdc++.h>
using namespace std;
struct site
{int x, y,number;
};
int dx[12]= {-2,-2,-1,1,2,2,2,2,1,-1,-2,-2},dy[12]= {-1,-2,-2,-2,-2,-1,1,2,2,2,2,1};
int main()
{int s[101][101],x1,y1,x2,y2;queue<site> que;site ss,f;memset(s,0xff,sizeof(s));             //s数组的初始化-1ss.x=ss.y=1;ss.number=0;que.push(ss);cin>>x1>>y1>>x2>>y2;               //读入黑马和白马的出发位置while(!que.empty())                     //若队列非空,则扩展队首结点{f=que.front();for(int d=0; d<=11; d++)     //枚举12个扩展方向{int x=f.x+dx[d];     //计算马按d方向跳跃后的位置int y=f.y+dy[d];if(x>0&&y>0&&x<=100&&y<=100)if(s[x][y]==-1)                //若(x,y)满足约束条件{s[x][y]=f.number+1;     //计算(1,1)到(x,y)的最少步数ss.x=x,ss.y=y,ss.number=s[x][y];que.push(ss);if(s[x1][y1]>0&&s[x2][y2]>0)   //输出问题的解{cout<<s[x1][y1]<<endl;cout<<s[x2][y2]<<endl;return 0;}}}que.pop();}
}

最少步数问题(BFS马走日)相关推荐

  1. 马走日 java实现

    马走日 问题描述: 在中国象棋里,马的走棋要遵循"马走日"的规则,在本题中,给定马的起始位置,以及一个目标位置,判定该马是否能够走到该位置,如果能走到,最少步数是多少.(假设棋盘上 ...

  2. 东华码蹄集第21周oj赛(光潮的幻像,分苹果,马走日,码哥猜想)

    小码哥在雪山闲逛的时候发现了一个神秘的序列.他发现如果按照一定的方式对这个序列进行操作,就可以得到一些隐藏的线索.这个序列含有n个整数,你需要对其进行m 次操作,操作分为两种: 1.给出下标α和整数y ...

  3. GDUT - 专题学习1 C - 马走日

    C - 马走日 题目 马在中国象棋以日字形规则移动. 请编写一段程序,给定 n×m 大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. ...

  4. 数据结构-马走日的解法

    [题目来自灰灰考研] (2018上海交通大学上机题)(2017华中科技大学上机题) 假设国际象棋棋盘有5*5共25个格子.设计一个程序,使棋子从初始位置(如图)开始跳马,需要将棋盘的格子全部都走一遍, ...

  5. 马走日(深度优先搜索)

    002:马走日 题目链接:http://cxsjsxmooc.openjudge.cn/2017t2summerfinal/002/ 总时间限制: 1000ms 内存限制: 1024kB 描述 马在中 ...

  6. [计蒜客]马走日-c++

    hi!大家好: 最近几天看了问答,发现有一些人在刷采纳,我就不说是谁了,建议官方处理一下: 好了,回到正题,最近几天,有个朋友问我了很多BFS的题 我打着打着就有点蒙,难的题对了,简单的题错了...就 ...

  7. 算法提高课-搜索-DFS之搜索顺序-AcWing 1116. 马走日:dfs

    题目分析 来源:acwing 分析: dfs分两类,一类是内部搜索,不需要恢复现场:一类是外部搜索(以整个图作为状态),需要恢复现场.这里的马走日就是状态图,需要恢复现场. 理清dfs,需要画一个搜索 ...

  8. 信息学奥赛一本通(1219:马走日)

    1219:马走日 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 12078     通过数: 6316 [题目描述] 马在中国象棋以日字形规则移动. 请编写一段程 ...

  9. 马走日程序Java_马走日什么意思

    中国象棋在中国有着三千多年的历史,在中国古代,象棋被列为士大夫们的修身之艺,属于琴棋书画四艺之一.现在则被视为是怡神益智的一种有益身心的活动. 中国象棋是由两人轮流走子,以"将死" ...

最新文章

  1. java单点登录强制下线_实现单点登录并强制对方下线
  2. mysql没有err文件_xampp中的mysql启动时无法产生err文件
  3. 树中两个结点的最低公共祖先
  4. 一文搞懂C语言typedef关键字
  5. Linux uptime 命令详解
  6. Java并发编程-volatile关键字介绍
  7. Hadoop入门(四)HDFS编程
  8. Mysql数据库存储原理
  9. 音频系统,Alsa 里面的buff 是怎么计算的?
  10. 上午的工作多以学习为主
  11. 车辆检测及型号识别,准确率接近90%
  12. 用python画圣诞树-圣诞节!教你用 Python 画棵圣诞树
  13. 预告 | 大咖Live X 数字绿土 CTO 赵宝林:高精度地图上车之路究竟还有多远?
  14. 漏洞战争: 软件漏洞发展趋势
  15. 插值和空间分析(二)_变异函数分析(R语言)
  16. c++ poco 使用mysql中文乱码问题
  17. rar linux下载64位下载地址,Linux中下载WinRAR并使用它解压rar文件
  18. Surf算法特征点检测与匹配
  19. 转!快速搭建视频直播平台
  20. linux服务器常用命令

热门文章

  1. 汇率贬值,何去何从?
  2. IntelliJ IDEA快速入门 | 第二十一篇:IntelliJ IDEA中的常用配置(十三)——设置项目文件的编码
  3. 在线工具 字节、比特、Kb单位转换器(Gb,Mb,Kb,字节,比特位之间的转换)
  4. 更换芯片stm32f103
  5. 企业申请ISO9001体系认证审核,流程分哪几步?
  6. 明象ERP创始人岳勤对于Odoo学习的建议
  7. Demo.exe 中的 0x10001fdd 处最可能的异常: 0xC0000005: 读取位置 0x0000001c 时发生访问冲突
  8. python 经管 实证研究_实证研究互助平台成立啦!
  9. 传感器实验——噪音警报
  10. 微信反复读取你的相册!官方回应:为便于聊天时快速发图,最新版本将取消...