当前位置:网站首页>HDU 1372 & POJ 2243 Knight moves (breadth first search)
HDU 1372 & POJ 2243 Knight moves (breadth first search)
2022-07-04 19:36:00 【Acacia moon tower】
Problem Description
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
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
For each test case, print one line saying "To get from xx to yy takes n knight moves.".
Sample Input
e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 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.
BFS The template questions , Add a little conversion .
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
typedef struct{
int x, y, step;
}p;
int dir[8][2] = {
{1,-2}, {2,-1}, {2,1}, {1,2}, {-1,2}, {-2,1}, {-2,-1}, {-1,-2}};
int map[10][10], ex, ey;
char s[5], s1[5];
int bfs() {
queue<p> q;
p t, next, start;
start.x = s[0]-'a', start.y = s[1]-'1';
start.step = 0;
ex = s1[0]-'a', ey = s1[1]-'1';
memset(map, 0, sizeof(map));
map[start.x][start.y] = 1;
q.push(start);
while(!q.empty()) {
t = q.front();
q.pop();
if(t.x == ex && t.y == ey) {
return t.step;
}
for(int i = 0; i < 8; i++) {
next.x = t.x + dir[i][0];
next.y = t.y + dir[i][1];
if(next.x == ex && next.y == ey) {
return t.step+1;
}
if(next.x >= 0&&next.x<8&&next.y>=0&&next.y<8&&map[next.x][next.y]==0) {
next.step = t.step + 1;
map[next.x][next.y] = 1;
q.push(next);
}
}
}
return 0;
}
int main() {
while(scanf("%s %s", s, s1) != EOF) {
printf("To get from %s to %s takes %d knight moves.\n", s, s1, bfs());
}
return 0;
}
边栏推荐
- LM10丨余弦波动顺势网格策略
- 1011 World Cup Betting (20 分)(PAT甲级)
- Pointnet/Pointnet++点云数据集处理并训练
- Lm10 cosine wave homeopathic grid strategy
- Nebula importer data import practice
- C # implementation defines a set of SQL statements that can be executed across databases in the middle of SQL (detailed explanation of the case)
- Stream stream
- One question per day (2022-07-02) - Minimum refueling times
- MySQL数据库基本操作-DDL | 黑马程序员
- 更安全、更智能、更精致,长安Lumin完虐宏光MINI EV?
猜你喜欢
Upgrade the smart switch, how much is the difference between the "zero fire version" and "single fire" wiring methods?
PolyFit软件介绍
Comment utiliser async awati asynchrone Task Handling au lieu de backgroundworker?
Go microservice (II) - detailed introduction to protobuf
用实际例子详细探究OpenCV的轮廓绘制函数drawContours()
node_ Exporter deployment
与二值化阈值处理相关的OpenCV函数、方法汇总,便于对比和拿来使用
Safer, smarter and more refined, Chang'an Lumin Wanmei Hongguang Mini EV?
The 300th weekly match of leetcode (20220703)
OpenCV的二值化处理函数threshold()详解
随机推荐
牛客小白月赛7 F题
1008 Elevator(20 分)(PAT甲级)
欧拉函数
English grammar_ Noun - use
Mysql database basic operation -ddl | dark horse programmer
关于判断点是否位于轮廓内的一点思考
ftp、sftp文件传输
添加命名空间声明
Nebula importer data import practice
偏移量函数及开窗函数
node_ Exporter deployment
26. 删除有序数组中的重复项 C#解答
Unity编辑器扩展C#遍历文件夹以及子目录下的所有图片
Use canal and rocketmq to listen to MySQL binlog logs
Shell programming core technology II
测试工程师如何“攻城”(上)
HDU 6440 2018中国大学生程序设计网络选拔赛
页面元素垂直水平居中、实现已知或者未知宽度的垂直水平居中。
Oracle with as ORA-00903: invalid table name 多表报错
1011 World Cup Betting (20 分)(PAT甲级)