博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ——Knight Moves(bfs)
阅读量:6293 次
发布时间:2019-06-22

本文共 2622 字,大约阅读时间需要 8 分钟。

Knight Moves

Time Limit: 2 Seconds     
Memory Limit: 65536 KB

A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that visits each square of a given set of n squares on a chessboard exactly once. He thinks that the most difficult part of the problem is determining the smallest number of knight moves between two given squares and that, once you have accomplished this, finding the tour would be easy.

Of course you know that it is vice versa. So you offer him to write a program that solves the "difficult" part.

Your job is to write a program that takes two squares a and b as input and then determines the number of knight moves on a shortest route from a to b.

Input Specification

The input file will contain one or more test cases. Each test case consists of one line containing two squares separated by one space. A square is a string consisting of a letter (a-h) representing the column and a digit (1-8) representing the row on the chessboard.

Output Specification

For each test case, print one line saying "To get from
xx to
yy takes
n knight moves.".

Sample Input

e2 e4a1 b2b2 c3a1 h8a1 h7h8 a1b1 c3f6 f6

Sample Output

To get from e2 to e4 takes 2 knight moves.To get from a1 to b2 takes 4 knight moves.To get from b2 to c3 takes 2 knight moves.To get from a1 to h8 takes 6 knight moves.To get from a1 to h7 takes 5 knight moves.To get from h8 to a1 takes 6 knight moves.To get from b1 to c3 takes 1 knight moves.To get from f6 to f6 takes 0 knight moves.

Source:
University of Ulm Local Contest 1996
  

 

#include
using namespace std;void bfs(int sx,int sy,int ex,int ey);struct state{ int x; int y;}temp1,temp2;int vis[100][100]={0};int dir[8][2]={
{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,-1},{-2,1}};void bfs(int sx,int sy,int ex,int ey,char s1[3],char s2[3]){ memset(vis,0,sizeof(vis)); queue
q; temp1.x = sx; temp1.y = sy; vis[sx][sy] = 1; q.push(temp1); while(!q.empty()){ temp1 = q.front(); q.pop(); for(int i=0;i<8;i++){ temp2.x = temp1.x + dir[i][0]; temp2.y = temp1.y + dir[i][1]; if(temp2.x >=1 && temp2.x<=8 && temp2.y >=1 && temp2.y<=8 && vis[temp2.x][temp2.y]==0){ vis[temp2.x][temp2.y]= vis[temp1.x][temp1.y]+1; q.push(temp2); } } if(vis[ex][ey]!=0){ printf("To get from %s to %s takes %d knight moves.\n",s1,s2,vis[ex][ey]-1); break; } }}int main(){ char s1[3]; char s2[3]; while(scanf("%s %s",&s1,&s2)!=EOF){ bfs(s1[0]-'a'+1,s1[1]-'0',s2[0]-'a'+1,s2[1]-'0',s1,s2); } return 0;}

  

 

转载于:https://www.cnblogs.com/xiaonuolen/p/10684308.html

你可能感兴趣的文章
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>