搜索专题: HDU1372Knight Moves
Knight Moves
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11832 Accepted Submission(s): 6969
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 row on the chessboard.
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.
RunId : 21142000 Language : G++ Author : hnustwanghe
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N = 8+5;
int visit[N][N];
typedef struct node{
int x,y,step;
}Node;
const int dir[8][2]={{2,1},{-2,1},{-2,-1},{2,-1},{1,2},{1,-2},{-1,-2},{-1,2}};
int print(){
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++){
printf("%d",visit[i][j]);
if(j==7)
printf("\n");
}
}
int DBFS(int x,int y,int goalx,int goaly){
queue<Node> Q1,Q2;
Node t,s;
int step1=0,step2=0,flag =1,cnt,newx,newy,ans;
memset(visit,0,sizeof(visit));
t.x = x,t.y = y,t.step = 0;
s.x = goalx,s.y = goaly,s.step = 0;
visit[t.x][t.y] = 1;
visit[s.x][s.y] = 2;
Q1.push(t);
Q2.push(s);
while(flag){
cnt = Q1.size();
while(cnt--){
t = Q1.front();
if(t.x == goalx && t.y == goaly) return t.step;
for(int d=0;d<8;d++){
newx = t.x + dir[d][0];
newy = t.y + dir[d][1];
step1 = t.step + 1;
if(newx>0 && newx <= 8 && newy>0 && newy<=8){
if(visit[newx][newy]==2){
ans = step1 + step2;
return ans;
}
if(!visit[newx][newy]){
s.x = newx,s.y= newy,s.step = step1;
Q1.push(s);
visit[newx][newy] = 1;
}
}
}
Q1.pop();
}
cnt = Q2.size();
while(cnt--){
t = Q2.front();
if(t.x==x && t.y==y) return t.step;
for(int d=0;d<8;d++){
newx = t.x + dir[d][0];
newy = t.y + dir[d][1];
step2 = t.step + 1;
if(newx>0 && newx<=8 && newy>0 && newy <=8){
if(visit[newx][newy]==1){
ans = step1 + step2;
return ans;
}
if(!visit[newx][newy]){
s.x = newx,s.y = newy,s.step = step2;
Q2.push(s);
visit[newx][newy] = 2;
}
}
}
Q2.pop();
}
}
return -1;
}
void Input_and_solve(){
char ch[10];
int x,y,goalx,goaly;
while(gets(ch)!=NULL){
x = ch[0]-'a'+1;
y = ch[1]-'0';
goalx = ch[3]-'a'+1;
goaly = ch[4]-'0';
printf("To get from %c%c to %c%c takes %d knight moves.\n",ch[0],ch[1],ch[3],ch[4],DBFS(x,y,goalx,goaly));
//print();
}
}
int main(){
Input_and_solve();
}
- #include<iostream>
- #include<cstdio>
- #include<queue>
- #include<cstring>
- using namespace std;
- const int N = 8+5;
- int visit[N][N];
- typedef struct node{
- int x,y,step;
- }Node;
- const int dir[8][2]={{2,1},{-2,1},{-2,-1},{2,-1},{1,2},{1,-2},{-1,-2},{-1,2}};
- int print(){
- for(int i=1;i<=8;i++)
- for(int j=1;j<=8;j++){
- printf("%d",visit[i][j]);
- if(j==7)
- printf("\n");
- }
- }
- int DBFS(int x,int y,int goalx,int goaly){
- queue<Node> Q1,Q2;
- Node t,s;
- int step1=0,step2=0,flag =1,cnt,newx,newy,ans;
- memset(visit,0,sizeof(visit));
- t.x = x,t.y = y,t.step = 0;
- s.x = goalx,s.y = goaly,s.step = 0;
- visit[t.x][t.y] = 1;
- visit[s.x][s.y] = 2;
- Q1.push(t);
- Q2.push(s);
- while(flag){
- cnt = Q1.size();
- while(cnt--){
- t = Q1.front();
- if(t.x == goalx && t.y == goaly) return t.step;
- for(int d=0;d<8;d++){
- newx = t.x + dir[d][0];
- newy = t.y + dir[d][1];
- step1 = t.step + 1;
- if(newx>0 && newx <= 8 && newy>0 && newy<=8){
- if(visit[newx][newy]==2){
- ans = step1 + step2;
- return ans;
- }
- if(!visit[newx][newy]){
- s.x = newx,s.y= newy,s.step = step1;
- Q1.push(s);
- visit[newx][newy] = 1;
- }
- }
- }
- Q1.pop();
- }
- cnt = Q2.size();
- while(cnt--){
- t = Q2.front();
- if(t.x==x && t.y==y) return t.step;
- for(int d=0;d<8;d++){
- newx = t.x + dir[d][0];
- newy = t.y + dir[d][1];
- step2 = t.step + 1;
- if(newx>0 && newx<=8 && newy>0 && newy <=8){
- if(visit[newx][newy]==1){
- ans = step1 + step2;
- return ans;
- }
- if(!visit[newx][newy]){
- s.x = newx,s.y = newy,s.step = step2;
- Q2.push(s);
- visit[newx][newy] = 2;
- }
- }
- }
- Q2.pop();
- }
- }
- return -1;
- }
- void Input_and_solve(){
- char ch[10];
- int x,y,goalx,goaly;
- while(gets(ch)!=NULL){
- x = ch[0]-'a'+1;
- y = ch[1]-'0';
- goalx = ch[3]-'a'+1;
- goaly = ch[4]-'0';
- printf("To get from %c%c to %c%c takes %d knight moves.\n",ch[0],ch[1],ch[3],ch[4],DBFS(x,y,goalx,goaly));
- //print();
- }
- }
- int main(){
- Input_and_solve();
- }
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta- #include<iostream>
- #include<cstdio>
- #include<queue>
- #include<cstring>
- using namespace std;
- typedef struct node{
- int x,y,step;
- }Node;
- bool visit[10][10];
- const int dir[8][2]={{-2,1},{-2,-1},{2,-1},{2,1},{1,2},{1,-2},{-1,2},{-1,-2}};
- int BFS(int x,int y,int goalx,int goaly){
- queue<Node>Q;
- memset(visit,0,sizeof(visit));
- int newx,newy;
- Node t,s;
- t.x = x,t.y = y,t.step = 0;
- visit[t.x][t.y] = true;
- Q.push(t);
- while(!Q.empty()){
- t = Q.front();
- if(t.x==goalx && t.y==goaly) return t.step;
- for(int d=0;d<8;d++){
- newx = t.x+dir[d][0];
- newy = t.y+dir[d][1];
- if(newx>=1 && newx<=8 && newy>=1 && newy<=8 && !visit[newx][newy]){
- s.x = newx;
- s.y = newy;
- s.step = t.step+1;
- Q.push(s);
- }
- }
- Q.pop();
- }
- return -1;
- }
- void Input_data_and_solve(){
- char a,c,ch[10];
- int b,d,x,y,goalx,goaly;
- while(gets(ch)!=NULL){
- a = ch[0];
- b = ch[1]-'0';
- c = ch[3];
- d = ch[4]-'0';
- x = a-'a'+1;
- y = b;
- goalx = c-'a'+1;
- goaly = d;
- BFS(x,y,goalx,goaly);
- printf("To get from %c%d to %c%d takes %d knight moves.\n",a,b,c,d,BFS(x,y,goalx,goaly));
- }
- }
- int main(){
- Input_data_and_solve();
- }
#include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; typedef struct node{ int x,y,step; }Node; bool visit[10][10]; const int dir[8][2]={{-2,1},{-2,-1},{2,-1},{2,1},{1,2},{1,-2},{-1,2},{-1,-2}}; int BFS(int x,int y,int goalx,int goaly){ queue<Node>Q; memset(visit,0,sizeof(visit)); int newx,newy; Node t,s; t.x = x,t.y = y,t.step = 0; visit[t.x][t.y] = true; Q.push(t); while(!Q.empty()){ t = Q.front(); if(t.x==goalx && t.y==goaly) return t.step; for(int d=0;d<8;d++){ newx = t.x+dir[d][0]; newy = t.y+dir[d][1]; if(newx>=1 && newx<=8 && newy>=1 && newy<=8 && !visit[newx][newy]){ s.x = newx; s.y = newy; s.step = t.step+1; Q.push(s); } } Q.pop(); } return -1; } void Input_data_and_solve(){ char a,c,ch[10]; int b,d,x,y,goalx,goaly; while(gets(ch)!=NULL){ a = ch[0]; b = ch[1]-'0'; c = ch[3]; d = ch[4]-'0'; x = a-'a'+1; y = b; goalx = c-'a'+1; goaly = d; BFS(x,y,goalx,goaly); printf("To get from %c%d to %c%d takes %d knight moves.\n",a,b,c,d,BFS(x,y,goalx,goaly)); } } int main(){ Input_data_and_solve();}
搜索专题: HDU1372Knight Moves的更多相关文章
- HDU(搜索专题) 1000 N皇后问题(深度优先搜索DFS)解题报告
前几天一直在忙一些事情,所以一直没来得及开始这个搜索专题的训练,今天做了下这个专题的第一题,皇后问题在我没有开始接受Axie的算法低强度训练前,就早有耳闻了,但一直不知道是什么类型的题目,今天一看,原 ...
- NOIP2018提高组金牌训练营——搜索专题
NOIP2018提高组金牌训练营——搜索专题 1416 两点 福克斯在玩一款手机解迷游戏,这个游戏叫做”两点”.基础级别的时候是在一个n×m单元上玩的.像这样: 每一个单元有包含一个有色点.我们将用不 ...
- 搜索专题:Balloons
搜索专题:Balloons 这道题一看与时间有关,第一想到的就是BFS,定义一个状态,包含每一个状态的剩余气球数,已经进行的时间和每一个志愿者上一次吹气球的时间: 每一次状态转换时,检查是否有没有使用 ...
- 2015 UESTC 搜索专题F题 Eight Puzzle 爆搜
Eight Puzzle Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 ...
- 2014 UESTC暑前集训搜索专题解题报告
A.解救小Q BFS.每次到达一个状态时看是否是在传送阵的一点上,是则传送到另一点即可. 代码: #include <iostream> #include <cstdio> # ...
- 【PHP高效搜索专题(2)】sphinx&coreseek在PHP程序中的应用实例
PHP可以通过三种途径来调用sphinx 通过Sphinx官方提供的API接口(接口有Python,Java,Php三种版本) 通过安装SphinxSE,然后创建一个中介sphinxSE类型的表,再通 ...
- 【PHP高效搜索专题(1)】sphinx&Coreseek的介绍与安装
我们已经知道mysql中带有"%keyword%"条件的sql是不走索引的,而不走索引的sql在大数据量+大并发量的时候,不仅效率极慢还很有可能让数据库崩溃.那我们如何通过某些关键 ...
- 2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索
邱老师降临小行星 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Des ...
- 蓝桥杯dfs搜索专题
2018激光样式 #include<bits/stdc++.h> using namespace std; /* dfs(i) 第i个激光机器 有两种选择:vis[i-1] == 0 时 ...
随机推荐
- PHP基础-表达式介绍
表达式是 PHP 最重要的基石.在PHP 编程 中,几乎所写的任何东西都是一个表达式.简单但却最精确的定义一个表达式的方式就是“任何有值的东西”. 最基本的表达式形式是常量和变量.当键入“$a = 5 ...
- 大哥带的Orchel数据库的盲注入bool型
0X01判断闭合 ?username=SMITH' 错误 ?username=SMITH'' 正确 ?username=SMITH' and ascii(substr((select user fro ...
- windows powershell的常用命令
cmd开启3389 如何用CMD开启3389与查看3389端口 开启 REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal /f 查端口 net ...
- 测试常用shell命令
正则表达式 特殊字符 $ . ' * [ ] ^ | ( ) \ + ? awk使用心得 将抽取域在屏幕上显示和保存到文件中 awk '{print $3}' t1.txt | tee file1.t ...
- android存储路径问题
关于存储路径问题,如果是想要存储在应用本身的路径下,如果该应用卸载的时候,对应文件随之卸载, 如果使用的是android level 8以上的版本,采用的是: getExternalFilesDir( ...
- Windows下启动.Net Core程序脚本
@echo offstart cmd /k "cd /D %~dp0&&dotnet xxx.dll" cmd /k 是执行完dir命令后不关闭命令窗口 cd /d ...
- 网络协议之TCP/IP协议
沙漏计时器型TCP/IP协议族,允许IP on everyting,即支持多种形式和物理层和数据链路层实现:同时支持多种多样的应用层协议,扩展了各式各样的服务. IP协议(网际协议) 与IP协议配套使 ...
- flutter dialog异常Another exception was thrown: Navigator operation requested with a context that does not include a Navigator
我在使用flutter里的对话框控件的时候遇到了一个奇怪的错误 Another exception was thrown: Navigator operation requested with a c ...
- Eclipse 添加Hibernate 插件
打开Eclipse, Help-->Eclipse Marketplace 在搜索框输入JBoss-Tools ,回车 根据搜索结果选择与自己Eclipse版本匹配的JBoss,然后点击 ...
- TCP网络编程(Socket通讯)
TCP 网路编程: 1.TCP 三次握手: 第一次握手,客户端向服务器端发出连接请求,等待服务器确认. 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求. 第三次握手,客户端再次向服 ...