# 10028. 「一本通 1.4 例 3」Knight Moves

【题目描述】

编写一个程序,计算一个骑士从棋盘上的一个格子到另一个格子所需的最小步数。骑士一步可以移动到的位置由下图给出。

【算法】

双向bfs优先扩展节点数少的队列。什么破东西速度没快多少啊。。。。

【代码】

#include <stdio.h>
#include <queue>
#define P pair<int,int>
#define ff first
#define ss second
using namespace std;
int T,ans,L;
int d[310][310][2];
const int dx[8]={-2,-1,1,2,2,1,-1,-2},dy[8]={1,2,2,1,-1,-2,-2,-1};
queue<P> q[2];
bool work(int x,queue<P>& q) {
P now=q.front(); q.pop();
for(int i=0;i<8;i++) {
int nx=now.ff+dx[i],ny=now.ss+dy[i];
if(nx>=1&&nx<=L&&ny>=1&&ny<=L&&d[nx][ny][x]==-1) {
d[nx][ny][x]=d[now.ff][now.ss][x]+1;
if(d[now.ff][now.ss][x^1]!=-1) {
ans=d[now.ff][now.ss][0]+d[now.ff][now.ss][1];
return 1;
}
q.push(make_pair(nx,ny));
}
}
return 0;
}
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d",&L);
P x; scanf("%d%d",&x.ff,&x.ss); x.ff++,x.ss++;
P y; scanf("%d%d",&y.ff,&y.ss); y.ff++,y.ss++;
for(int i=1;i<=L;i++)
for(int j=1;j<=L;j++)
d[i][j][0]=d[i][j][1]=-1;
queue<P> q[2];
q[0].push(x),d[x.ff][x.ss][0]=0;
q[1].push(y),d[y.ff][y.ss][1]=0;
while(q[0].size()&&q[1].size()) {
if(q[0].size()<q[1].size()) {
if(work(0,q[0])) break;
}else {
if(work(1,q[1])) break;
}
}
printf("%d\n",ans);
}
return 0;
}

Knight Moves (双向bfs)的更多相关文章

  1. HDU 1372 Knight Moves (bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...

  2. HDU 1372 Knight Moves【BFS】

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

  3. uva439 - Knight Moves(BFS求最短路)

    题意:8*8国际象棋棋盘,求马从起点到终点的最少步数. 编写时犯的错误:1.结构体内没构造.2.bfs函数里返回条件误写成起点.3.主函数里取行标时未注意书中的图. #include<iostr ...

  4. ZOJ 1091 (HDU 1372) Knight Moves(BFS)

    Knight Moves Time Limit: 2 Seconds      Memory Limit: 65536 KB A friend of you is doing research on ...

  5. HDU-1372 Knight Moves (BFS)

    Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) where yo ...

  6. HDOJ/HDU 1372 Knight Moves(经典BFS)

    Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) where yo ...

  7. HDU1372:Knight Moves(经典BFS题)

    HDU1372:Knight Moves(BFS)   Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %l ...

  8. Knight Moves(BFS,走’日‘字)

    Knight Moves Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  9. Knight Moves(hdu1372 bfs模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Others)   ...

  10. HDU1372 Knight Moves(BFS) 2016-07-24 14:50 69人阅读 评论(0) 收藏

    Knight Moves Problem Description A friend of you is doing research on the Traveling Knight Problem ( ...

随机推荐

  1. Python---协程---重写多进程

    一. # 匹配一行文字中所有开头的字母import re s = 'i love you but you don\'t love me' # \b\m findallcontent = re.find ...

  2. sql优化-派生表与inner-join

    首先来说明一下派生表? 外部的表查询的结果集是从子查询中生成的.如下形式: select ... from (select ....) dt 如上形式中括号中的查询的结果作为外面select语句的查询 ...

  3. GDOI2016总结

    前言 第一次GDOI,收获了很多. 这几天下来的生活有趣而精彩,尽管我没有高级的腐败工具,但是还是通过偷抢拐骗各种方法满足了腐败的欲望了. BUT,参加GDOI可不是为了玩耍,而是去提升自己的实力,磨 ...

  4. 【leetcode】493. Reverse Pairs

    题目如下: 解题思路:本题要求的是数组每个元素和所有排在这个元素后面的元素的值的二倍做比较.我们可以先把数组所有元素的二倍都算出来,存入一个新的数组newlist,并按升序排好.而后遍历nums数组的 ...

  5. get和post请求方式的区别,常见状态码的整理

    get和post的区别 get和post是什么? HTTP协议中的两种发送请求的方法.get从指定的资源请求数据: post向指定的资源提交要被处理的数据. HTTP是什么? 超文本传输协议(HTTP ...

  6. adb打开系统设置的命令

    adb命令打开手机设置页面 设置主页面adb shell am start com.android.settings/com.android.settings.Settings 安全adb shell ...

  7. ckeditor直接粘贴图片实现

    自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...

  8. 通过运行窗口输入命令方式,打开Internet窗口

    WIN + R 按键, 运行窗口出来后,我们输入‘inetcpl.cpl“,然后按确定. 弹出Interent属性窗口.

  9. es之java索引操作

    1.7.1: 创建索引 /** * 创建索引 * */ @Test public void createIndex(){ // 创建索引 CreateIndexResponse blog2 = cli ...

  10. win10文件夹不自动刷新的解决方案

    win10文件夹不自动刷新的解决方案 https://jingyan.baidu.com/article/d7130635d45a5013fcf47544.html