Knight Moves (双向bfs)
# 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)的更多相关文章
- HDU 1372 Knight Moves  (bfs)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ... 
- HDU 1372 Knight Moves【BFS】
		题意:给出8*8的棋盘,给出起点和终点,问最少走几步到达终点. 因为骑士的走法和马的走法是一样的,走日字形(四个象限的横竖的日字形) 另外字母转换成坐标的时候仔细一点(因为这个WA了两次---@_@) ... 
- uva439 - Knight Moves(BFS求最短路)
		题意:8*8国际象棋棋盘,求马从起点到终点的最少步数. 编写时犯的错误:1.结构体内没构造.2.bfs函数里返回条件误写成起点.3.主函数里取行标时未注意书中的图. #include<iostr ... 
- 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 ... 
- HDU-1372          Knight Moves (BFS)
		Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) where yo ... 
- HDOJ/HDU 1372 Knight Moves(经典BFS)
		Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) where yo ... 
- HDU1372:Knight Moves(经典BFS题)
		HDU1372:Knight Moves(BFS) Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %l ... 
- Knight Moves(BFS,走’日‘字)
		Knight Moves Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ... 
- Knight Moves(hdu1372 bfs模板题)
		http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Others) ... 
- 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 ( ... 
随机推荐
- MySQL--全文索引作用、原理及使用注意
			作用 MySQL索引可以分为:主键索引.普通索引.唯一索引.全文索引.其中,全文索引应该是是比较特殊的,它只有少数的几个存储引擎支持,且只有类型为char.vchar.text的列能建立全文索引.以前 ... 
- 【LuoguP3270】[JLOI2016] 成绩比较
			题目链接 题目描述 G系共有n位同学,M门必修课.这N位同学的编号为0到N-1的整数,其中B神的编号为0号.这M门必修课编号为0到M-1的整数.一位同学在必修课上可以获得的分数是1到Ui中的一个整数. ... 
- python之GUI编程-tkinter学习
			推荐几个学习网址:https://www.cnblogs.com/shwee/p/9427975.html https://cloud.tencent.com/developer/section/13 ... 
- Linux学习-基于CentOS7的LAMP环境实现多虚拟主机
			一.实验环境 系统:CentOS7.6 主机:两台(一台也可以),一台实现apache+php-fpm (192.168.214.17),一台实现mysql服务器 (192.168.214.27) 软 ... 
- Form 表单用 Ajax 提交数据并用 jQuery Validate 验证
			表单填写需要验证可用插件 jQuery Validate 提交数据使用 Ajax 可操控性得到提到 注意:请自行引入 jQuery 和 jQuery Validate HTML 代码 <form ... 
- mac 外接屏幕切换操作
			mac 屏幕小,可外接合适的屏幕扩展.接好屏幕后: 在 mac 系统变化中看到显示器字样, 点击排列,可以看到一个白色的条状色块,即为主屏幕.(镜像显示不能选中) 在 mac 怎么打开一个应用,在其中 ... 
- jsoncpp 源码编译与简单使用
			******************************************************标准C++实现jsoncpp 源码使用编译(VC2012 MFC)(Qt5.2 Widget ... 
- 版本基线自动化之Linux
			上一篇笔者叙述了如何在windows平台上进行自动化打包,这次采用linux平台 1.start.bat : 调用cleanall.bat脚本 ,从svn服务器中检出代码,并采用7-Zip工具进行压缩 ... 
- layer.open()中属性content在IE 8中提示“网页无法显示”
			将图中的${ctx}值为 将${ctx}更改为BASEURI 如图: 若是在IE8上中弹出框中还是显示网页无法显示.可以改为 content:‘http://127.0.0.1:8081/projec ... 
- @ResponseBody返回4种数据格式的数据
			1.返回一个键值对或者集合 前端JS请求: //返回值为map的形式 $(".name").blur(function(){ $.ajax({ type:"Post&qu ... 
