Knight Moves

时间限制: 1000ms 内存限制: 65535KB

问题描述

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.

输入描述

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.

输出描述

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

样例输入

e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6

样例输出

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.

来源

{Ulm Local 1996}

问题分析:(略)

这个问题和《UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves【BFS】》是同一个问题,代码拿过来用就AC了。

程序说明:参见参考链接。

参考链接:UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves【BFS】

题记:程序做多了,不定哪天遇见似曾相识的。

AC的C++程序如下:

/* UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves */  #include <iostream>
#include <cstring>
#include <queue>  using namespace std;  const int DIRECTSIZE = 8;
struct direct {  int drow;  int dcol;
} direct[DIRECTSIZE] =  {{-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}, {-1, -2}, {-2, -1}};  const int MAXN = 8;
char grid[MAXN][MAXN];  struct node {  int row;  int col;  int level;
};  node start, end2;
int ans;  void bfs()
{  queue<node> q;  memset(grid, ' ', sizeof(grid));  grid[start.row][start.col] = '*';  ans = 0;  q.push(start);  while(!q.empty()) {  node front = q.front();  q.pop();  if(front.row == end2.row && front.col == end2.col) {  ans = front.level;  break;  }  for(int i=0; i<DIRECTSIZE; i++) {  int nextrow = front.row + direct[i].drow;  int nextcol = front.col + direct[i].dcol;  if(0 <= nextrow && nextrow < MAXN && 0 <= nextcol && nextcol < MAXN)  if(grid[nextrow][nextcol] == ' ') {  grid[nextrow][nextcol] = '*';  node v;  v.row = nextrow;  v.col = nextcol;  v.level = front.level + 1;  q.push(v);  }  }  }
}  int main(void)
{  char startc, endc;  while(cin >> startc >> start.row >> endc >> end2.row) {  start.row--;  start.col = startc - 'a';  start.level = 0;  end2.row--;  end2.col = endc - 'a';  bfs();  printf("To get from %c%d to %c%d takes %d knight moves.\n", startc, start.row+1, endc, end2.row+1, ans);  }  return 0;
}

NUC1333 Knight Moves【DFS】相关推荐

  1. Bailian2815 城堡问题【DFS】

    2815:城堡问题 总时间限制: 1000ms 内存限制: 65536kB 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ...

  2. Bailian2816 红与黑【DFS】

    2816:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动.请写一 ...

  3. NUC1158 Lake Counting【DFS】

    Lake Counting 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 Due to recent rains, water has pooled ...

  4. NUC1399 Sum It Up【DFS】

    Sum It Up 时间限制: 1000ms 内存限制: 65535KB 通过次数: 1总提交次数: 1 问题描述 Given a specified total t and a list of n ...

  5. HDU1181 变形课【DFS】(废除)

    新题解参见:HDU1181 变形课[DFS+关系闭包+bitset] 变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 13107 ...

  6. 【DFS】巧妙取量的倒油问题

    题目描述 [题目描述]  有三个容器,容量分别为 a,b,c(a> b > c ),一开始a装满油,现在问是否只靠abc三个容器量出k升油.如果能就输出"yes",并且 ...

  7. [kuangbin]专题三 Dancing Links Squiggly Sudoku HDU - 4069【DFS】【精确覆盖】

    [题目描述] Today we play a squiggly sudoku, The objective is to fill a 9*9 grid with digits so that each ...

  8. 【DFS】不撞南墙不回头—深度优先搜索算法[Deep First Search]

    今天上午听到,那个非常6+1的李咏先生因癌症去世 DFS算法的基本模型 深度下,不撞南墙不回头,就是一直往后找,知道没有路了,向后返回. 想起一首民谣,<可能否>--木小雅 https:/ ...

  9. 【dfs】病毒(jzoj 1284)

    病毒 题目大意: 有n(1<=n<=1000)头奶牛,d(1<=d<=15)种病毒,每头奶牛身上有可能有很多种病毒病毒,每头奶牛挤出的牛奶是混在一起放的,问最多可以挤多少头奶牛 ...

最新文章

  1. 如何让python图案旋转_python实现旋转和水平翻转的方法
  2. 利用javascript和WebGL绘制地球 【翻译】
  3. MySQL的主从复制主从同步
  4. Spring Boot框架表达式注入漏洞
  5. 基于 HTTP 协议的几种实时数据获取技术
  6. 2019-03-18-算法-进化(反转链表)
  7. Bootstrap定制开发
  8. 【C++】 12_经典问题解析 一
  9. 解压版mysql中文变成_解压版MYSQL中文乱码问题解决方案
  10. Java 里面 final 与 static
  11. Chrome 上最必不可少的29 款插件,超级提高效率
  12. es 创建索引 指定id_ES的基本用法
  13. 【数学建模】基于matlab银行多机排队论模型【含Matlab源码 1096期】
  14. 语音转文字怎么转?分享这些实用软件
  15. 【阅读笔记】(语义分割最全总结,综述)《A Review on Deep Learning Techniques Applied to Semantic Segmentation》
  16. 腾讯发布区块链产业加速器,生态共创助力新基建建设
  17. Access Key / Secret key 密钥安全原理架构
  18. 人形机器人踢“世界杯”有经验!主动躲避摔伤风险,跟踪目标精准进球
  19. ixgbe 如何开启vf
  20. 系统分析师(一)软考简介

热门文章

  1. Arcgis Server开发使用query报错
  2. 从零玩转Webpack4~5+实现原理笔记(二)
  3. 小程序报错:Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail req..
  4. html5画布作品,10个会让你惊叹不已的HTML5画布(CANVAS)技术应用演
  5. SQL基础笔试题(二)
  6. Hive 与 RDBMS的区别
  7. Caused by: java.sql.SQLException: Unable to open a test connection to the given database报错无法打开到给定数据库
  8. 集合点(掌握)-并发
  9. 怎么打钩_如何在excel中打钩
  10. C++基本控制类型及流程语句详解