POJ2243 Knight Moves —— A*算法

题目链接:http://poj.org/problem?id=2243


 

Knight Moves
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 14500 Accepted: 8108

 

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 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.

Source

Ulm Local 1996

 




题解:

这题直接用BFS就可以过了。但是想借助这题学一下A*算法(但以下写法好像不是完整的或者说正确的写法,先放一放,以后遇到再深入)。



代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <queue>
 6 #include <cmath>
 7 using namespace std;
 8 typedef long long LL;
 9 const int INF = 2e9;
10 const LL LNF = 9e18;
11 const int MOD = 1e9+7;
12 const int MAXN = 8+10;
13 
14 struct node
15 {
16     int x, y, step;
17     int g, h, f;
18     bool operator<(const node&a)const{
19         return f>a.f;
20     }
21 };
22 bool vis[MAXN][MAXN];
23 int dir[8][2] = { {1,2}, {1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1} };
24 
25 int gdis(int x_step, int y_step)    //直线距离
26 {
27     return (int)sqrt(x_step*x_step+y_step*y_step)*10+1;
28 }
29 
30 int hdis(node a, node b)    //曼哈顿距离
31 {
32     return ( abs(a.x-b.x) + abs(a.y-b.y) )*10;
33 }
34 
35 priority_queue<node>que;
36 int Astar(node st, node en)
37 {
38     memset(vis,false,sizeof(vis));
39     st.step = st.g = st.h = st.f = 0;
40     while(!que.empty()) que.pop();
41     que.push(st);
42     vis[st.x][st.y] = true;
43 
44     while(!que.empty())
45     {
46         node now = que.top();
47         que.pop();
48         if(now.x==en.x && now.y==en.y)
49             return now.step;
50 
51         for(int i = 0; i<8; i++)
52         {
53             node tmp;
54             tmp.x = now.x + dir[i][0];
55             tmp.y = now.y + dir[i][1];
56             if(tmp.x>=1 && tmp.x<=8 && tmp.y>=1 && tmp.y<=8 && !vis[tmp.x][tmp.y])
57             {
58                 tmp.step = now.step + 1;
59                 tmp.g = now.g + gdis(abs(dir[i][0]), abs(dir[i][1]));
60                 tmp.h = hdis(tmp, en);
61                 tmp.f = tmp.g + tmp.h;
62 
63                 vis[tmp.x][tmp.y] = true;
64                 que.push(tmp);
65             }
66         }
67     }
68 }
69 
70 int main()
71 {
72     char s1[10], s2[10];
73     while(scanf("%s%s", s1, s2)!=EOF)
74     {
75         node st, en;
76         st.x = s1[0]-'a'+1;
77         st.y = s1[1]-'0';
78         en.x = s2[0]-'a'+1;
79         en.y = s2[1]-'0';
80         int step = Astar(st,en);
81         printf("To get from %c%d to %c%d takes %d knight moves.\n",st.x+'a'-1,st.y,en.x+'a'-1,en.y,step);
82     }
83 }
View Code

 


 

转载于:https://www.cnblogs.com/DOLFAMINGO/p/7538602.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac配置telnet

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" brew install telnet

linux下的DNS服务器详解

DNS&#xff1a;Domain Name System 域名管理系统 域名是由圆点分开一串单词或缩写组成的&#xff0c;每一个域名都对应一个惟一的IP地址&#xff0c;这一命名的方法或这样管理域名的系统叫做域名管理系统。 大家都知道&#xff0c;当我们在上网的时候&#xff0c;通常输入的是…

怎样玩转千万级别的数据

作者&#xff1a;Sam Xiaowww.cnblogs.com/xcj26/p/3305789.html如有好文章投稿&#xff0c;请点击 → 这里了解详情大数据处理是一个头疼的问题&#xff0c;特别当达不到专业DBA的技术水准时&#xff0c;对一些数据库方面的问题感到无奈。所以还是有必要了解一些数据库方面的技…

关于待机、休眠、睡眠的区别和优缺点

Windows中很早就加入了待机、休眠等模式&#xff0c;而Windows Vista中更是新加入了一种叫做睡眠的模式&#xff0c;可是很多人还是习惯在不使用电脑的时候 将其彻底关闭。其实充分利用这些模式&#xff0c;我们不仅可以节约电力消耗&#xff0c;还可以用尽可能短的时间把系统恢…

自定义权限 android,如何在Android中使用自定义权限?

蛊毒传说我创建了一个测试代码&#xff0c;您可以使用它并测试您的权限。有两个应用程序PermissionTestClient声明权限并使用此权限保护其活动。这是清单文件&#xff1a;<?xml version"1.0" encoding"utf-8"?> …

MYSQL在centos上主从配置

主从配置理论传送门:http://blog.csdn.net/hguisu/article/details/7325124 具体配置方案: 一&#xff1a;MYSQL主从配置 1.1 部署环境 主(master_mysql): 192.168.1.200 OS:CentOS 6.5 从(slave_mysql): 192.168.1.201 OS:CentOS 6.5 1.2 安装mysql 主和从: yu…

Android实现支付宝AR功能,Android RecyclerView 实现支付宝首页效果

Android RecyclerView 实现支付宝首页效果[TOC]虽然我本人不喜欢支付宝的,但是这个网格本身其实还是不错的,项目更新中更改了一个布局为网格模式,类似支付宝.(估计是产品抄袭的.,我不管设计,只管实现就好.)类名描述RecyclerView.Adapter托管数据集合&#xff0c;为每个Item创建…

android wear评测,android wear5.1怎么样 android wear5.1更新评测

android wear5.1更新评测触控和菜单改善新版android wear的用户界面得到了小幅度的改进。在屏幕上向下滑动会唤出重新设计的快捷菜单&#xff0c;当中包含着诸多应用程序和功能的快捷方式。而如果是向左滑动&#xff0c;屏幕上会显示出常用联系人&#xff0c;你可以点击他们的头…

ReactiveCocoa入门教程——第一部分

本文翻译自RayWenderlich,原文&#xff1a;ReactiveCocoa Tutorial--The Definitive Introduction: Part 1/2 作为一个iOS开发者&#xff0c;你写的每一行代码几乎都是在相应某个事件&#xff0c;例如按钮的点击&#xff0c;收到网络消息&#xff0c;属性的变化&#xff08;通过…

C# Android wifi控制灯,求助如何在基于安卓通过WiFi与Arduino通信,实现对LED灯的控制。...

满意答案dkmeng推荐于 2017.12.15采纳率&#xff1a;55% 等级&#xff1a;9已帮助&#xff1a;567人项目需要的硬件如下&#xff1a;Arduino UnoEthernet ShieldLED灯 2个.电阻 2个.面包板(可选)连接导线路由器一个项目要的连接管脚如下&#xff1a;LED 1 --> pin 6 to g…

Mozilla 放出新的 Firefox 3.5 RC 版本(RC 3)

这几天 Mozilla 对 Firefox 3.5 的更新节奏真是够快&#xff0c;今天&#xff0c;一个新的 RC 版本&#xff08;显示为 RC 3&#xff09;又放出了。Firefox 3.5 RC 3 主要根据用户对之前版本的反馈进行了修正。有趣的是&#xff0c;笔者在其关于对话框中并没有发现 RC 字样&…

android studio 抽屉,java - Android导航抽屉(由Android Studio默认提供) - 堆栈内存溢出...

当我按下导航菜单项的更改时&#xff0c;它的颜色为黄色&#xff0c;直到释放时一直按它为默认。我没有明确编写任何代码来设置这些设置。 我该如何停止&#xff1f;请帮忙。 这是我的代码。 主要布局xmlns:android"http://schemas.android.com/apk/res/android"xmln…

大数据正在改变客户服务的五种方式

大数据正在改变客户服务的五种方式 任何组织的命脉&#xff0c;无论是否面向服务&#xff0c;都是需要为客户提供良好的服务。组织如何与其客户进行互动&#xff0c;会影响他们如何看待组织&#xff0c;这会影响潜在客户&#xff0c;除了组织最忠实的客户之外。 客户服务行业一…