题目描述

在一个标准8×8的国际象棋棋盘上,棋盘中有些格子可能是有障碍物的。已知骑士的初始位置和目标位置,你的任务是计算出骑士最少需要多少步可以从初始位置到达目标位置。有障碍物的格子当然不可以到达。
标准的8×8的国际象棋棋盘中每一个格子可以用唯一的编号确定。行用1~8这8个数字依次表示,列用a~h这8个字母依次表示。例如图中的骑士所在位置(图中有n的格子)的编号为“d4”(注意d和4之间没有空格)。

我们知道国际象棋中的骑士可以按“L”路线移动(一个方向走2个格子,接着垂直方向走1个格子)。因此,图中的骑士(位于d4),可以到达位置c2、b3、b5、c6、e6、f5、f3和e2(图中有“x”标记的格子)。此外,骑士不能移出棋盘。
骑士可以按照移动规则自由地在棋盘上没有障碍物的格子中移动,图中给出了一个骑士移动的例子。初始格子用“n”标记,目标格子用“N”标记,有障碍物的格
子用“b”标记。一个可行的移动序列在图中用数字标记出来(al,b3,a5,c6,e5,94,h2,fl),总共需要7步才能完成。事实上,这也就是
最小的步数了。

输入

输入文件包括1个或多个测试数据。
每1个测试数据的第1行是一个整数b(-1≤b≤62),表示棋盘中有障碍物的格子数目,当b=-1时,输入文件结束;
第2行含b个不同的有障碍物的格子编号,用空格隔开。当b=0 时,此行为空行;
第3行是骑士的初始格子和目标格子的编号,也是用空格隔开。初始格子和目标格子是不同的,且都没有障碍物。

输出

对于每个数据,输出1行。格式:Board n:m moves,其中n表示数据的序号(从1开始),m表示骑士所用的最小的步数。如果骑士无法到达目标格子,输出:Board n:not reachable。

样例输入

8
c5 b4 c1 b2 e1 e5 f4 f2
d3 h8
8
e8 e7 e6 e5 e4 e3 e2 e1
d3 h8
-1

样例输出

Board 1: not reachable
Board 2: 3 moves
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
using namespace std;
int n,m,flag,a,b;
int dis[][]= {-,,-,,,,,,,-,,-,-,-,-,-};
int vis[][];
int w[][];
string str;
struct man
{
int x,y,step;
};
queue<man>q;
void bfs(man s,int enx,int eny)
{
q.push(s);
vis[s.x][s.y]=;
while(!q.empty())
{
man t=q.front();
q.pop();
//printf("%d %d %d\n",t.x,t.y,t.step);system("pause");
if(t.x==enx&&t.y==eny)
{
printf("%d moves\n",t.step);
flag=;
return;
}
for(int i=; i<; i++)
{
int xx=t.x+dis[i][];
int yy=t.y+dis[i][];//
//printf("%d %d\n",xx,yy);
if(xx>=&&xx<&&yy>=&&yy<&&w[xx][yy]!=&&vis[xx][yy]==)
{
man k;
k.x=xx;
k.y=yy;
k.step=t.step+;
q.push(k);
vis[xx][yy]=;
}
}
}
}
int main()
{
int g,h;int cnt=;
while(~scanf("%d",&n))
{cnt++;flag=;
while(!q.empty())q.pop();
int enx;int eny; if(n==-)break;
memset(vis,,sizeof(vis));
memset(w,,sizeof(w));
while(n--)
{
cin>>str;
w[str[]-'a'][str[]-'']=;
}
string sta,en;
cin>>sta>>en;
man s;s.x=sta[]-'a';s.y=sta[]-'';s.step=;q.push(s);
enx=en[]-'a';eny=en[]-'';
printf("Board %d: ",cnt);
bfs(s,enx,eny);
if(flag==)puts("not reachable");
} return ;
}

帅得不要不要的

												

骑士问题(knight) (BFS)的更多相关文章

  1. hihoCoder 1308:搜索二·骑士问题(BFS预处理)

    题目链接 题意 中文题意. 思路 对于每一个骑士,可以先预处理出到达地图上某个点的需要走的步数,然后最后暴力枚举地图上每一个点,让三个骑士走过的距离之和最小即可. #include <bits/ ...

  2. 骑士游历/knight tour - visual basic 解决

    在visual baisc 6 how to program 中文版第七章的练习题上看到了这个问题,骑士游历的问题. 在8x8的国际象棋的棋盘上,骑士(走法:一个方向走两格,另一个方向一格)不重复走完 ...

  3. 【BZOJ1085】[SCOI2005]骑士精神 双向BFS

    [BZOJ1085][SCOI2005]骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它 ...

  4. 杂项:Unity3D

    ylbtech-杂项:Unity3D Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具 ...

  5. 【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&amp;攻略+SSG改动+打开存档补丁]

    冒险者们哟.寻找龙秘玉吧--! ninetail的最新作,是使用丰富多彩的技能·道具探索迷宫的3D迷宫RPG! 存在着骑士和神官的架空世界常见的职业为首的13种职业.超过数百种的道具的登场! 和伙伴一 ...

  6. SFC游戏列表(维基百科)

    SFC游戏列表 日文名 中文译名 英文版名 发行日期 发行商 スーパーマリオワールド 超级马里奥世界 Super Mario World 1990年11月21日 任天堂 エフゼロ F-Zero F-Z ...

  7. Noip2019暑期训练2

      题目名称 骑士遍历 和谐俱乐部 农场派对 对称二叉树 存盘文件名 knight Beautiful party tree 输入文件名 knight.in Beautiful.in party.in ...

  8. BFS 骑士的移动

    骑士的移动 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/E 题目: Description A f ...

  9. HDU 1372 Knight Moves【BFS】

    题意:给出8*8的棋盘,给出起点和终点,问最少走几步到达终点. 因为骑士的走法和马的走法是一样的,走日字形(四个象限的横竖的日字形) 另外字母转换成坐标的时候仔细一点(因为这个WA了两次---@_@) ...

随机推荐

  1. win10 用微软账户登录无法访问共享的问题

    百度找了一大堆可以解决的,最终最简单的方式(可能是bug): 测试了一下,Win10用微软账户登录的,连局域网共享时,输入用户名的时候,前面加个乱七八糟的域名就可以访问了: 比如: 用户名:   ba ...

  2. [安卓][转]Android eclipse中程序调试

    一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...

  3. [安卓]AndroidManifest.xml文件简介及结构

    1.AndroidManifest.xml文件简介: 每个应用程序在它的根目录中都必须要有一个AndroidManifest.xml(名字须精确一致)文件.这个清单把应用程序的基本信息提交给Andro ...

  4. SharePoint安全 - 攻破SharePoint(黑客工具介绍)

    博客地址 http://blog.csdn.net/foxdave SharePoint的安全性很高,这是我们潜意识里的第一印象,所以具体的安全性体现在哪并没仔细研究过.但是事实上确实没有绝对安全的东 ...

  5. selectNodes

    解析beans.xml的时候有时候找不到节点,把其他多余的删除之后就好了,不知道为什么.

  6. C# 使用命令行编译单个CS文件

    编译单个CS文件. 1.编译   File.cs   以产生   File.exe:       csc   File.cs     2.编译   File.cs   以产生   File.dll:  ...

  7. Ant、Maven、Gradle

    android Gradle project http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ http://www.voge ...

  8. 如何通过 GT 快速开始性能测试?

    http://gt.tencent.com/docs/a/2.1/GTAndroidQuickStart.pdf Summary 安装 GT(GT.apk)后,不需要连接 PC 和在被测应用中插入代码 ...

  9. loadrunner录制时弹出invalid application path!please check if application exists对话框

    问题:oadrunner录制时弹出invalid application path!please check if application exists对话框 原因:IE浏览器地址不对,需要手动重新选 ...

  10. HDOJ-三部曲一(搜索、数学)-1006- Catch That Cow

    Catch That Cow Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Tot ...