跳马

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

在国际象棋中,马的走法与中车象棋类似,即俗话说的“马走日”,下图所示即国际象棋中马(K)在一步能到达的格子(其中黑色的格子是能到达的位置)。

现有一200*200大小的国际象棋棋盘,棋盘中仅有一个马,给定马的当前位置(S)和目标位置(T),求出马最少需要多少跳才能从当前位置到达目标位置。

输入:

本题包含多个测例。输入数据的第一行有一个整数N(1<=N<=1000),表示测例的个数,接下来的每一行有四个以空格分隔的整数,分别表示马当前位置及目标位置的横、纵坐标C(x,y)和G(x,y)。坐标由1开始。

输出:

对于每个测例,在单独的一行内输出一个整数,即马从当前位置跳到目标位置最少的跳数。

输入样例:

21 1 2 11 5 5 1

输出样例:

34

答案如下:

#include

#include

using namespace std;

int cx,cy,gx,gy;

int a[201][201]={0};

int step[201][201];

//马走的方向所对应的行列变化

int b[8]={-2,-2,-1,-1,1,1,2,2};

int c[8]={-1,1,-2,2,-2,2,-1,1};

//结构体内定义队列

struct add

{

queueq1;

queueq2;

}add;

int search(int x,int y);

int main()

{

int n,i,j,k=0;

cin>>n;

int ans[n];

while(k

{

cin>>cx>>cy>>gx>>gy;

//初始化

step[cx][cy]=0;

a[cx][cy]=1;

add.q1.push(cx);

add.q2.push(cy);

ans[k++]=search(cx,cy);

//清空棋盘和队列,防止下一组测试受到影响

for(i=0;i<201;i++)

{

for(j=0;j<201;j++)

{

a[i][j]=0;

step[i][j]=0;

}

}

while(!add.q1.empty())

{

add.q1.pop();

}

while(!add.q2.empty())

{

add.q2.pop();

}

}

for(i=0;i

{

cout<

}

return 0;

}

int search(int x,int y)

{

int xt,yt,e,f,i;

while(1)

{

e=add.q1.front();

add.q1.pop();

f=add.q2.front();

add.q2.pop();

for(i=0;i<8;i++)

{

xt=e+b[i];

yt=f+c[i];

if(xt==gx&&yt==gy)

{

return(step[e][f]+1);

}

if(xt<1||xt>200||yt<1||yt>200) continue;//剪枝数组越界的情况

if(a[xt][yt]==0)

{//处理下一组可能的情况

a[xt][yt]=1;

step[xt][yt]=step[e][f]+1;

add.q1.push(xt);

add.q2.push(yt);

}

}

}

}



跳马周游c++_C++——跳马问题(广搜)相关推荐

  1. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

  2. 搜索:广搜 词语阶梯

    问题描述以及解决过程如下导图 广搜实现如下 #include <iostream> #include <algorithm> #include <vector> # ...

  3. [NC23486]小A与小B 双向广搜

    题解:这个题属于走迷宫类型问题的一个升级版吧,不同之处在于一秒钟小A走一步,小B可以走两步,这两种事件是同时发生的,所以我们每秒钟让A扩散一步,让B扩散两步. 两个人走过的路径分别用 visited[ ...

  4. 【图论专题】BFS中的双向广搜 和 A-star

    双向广搜 AcWing 190. 字串变换 #include <cstring> #include <iostream> #include <algorithm> ...

  5. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  6. UVA 122 Trees on the level 二叉树 广搜

    题目链接: https://vjudge.net/problem/UVA-122 题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not comple ...

  7. hrbust 1616 密码锁(广搜)

    分析:广搜,每个四位数作为一个状态,从每个状态扩展出其他的几种状态并累加步数之后加入队列. 1 #include <stdio.h> 2 #include <string.h> ...

  8. [kuangbin] M - Find a way(简单广搜)

    题目链接:https://vjudge.net/contest/215603#problem/M 其中三维数组dis将两个广搜合并到了一起 #include<iostream> #incl ...

  9. hdu5025 状态压缩广搜

    题意:       悟空要救唐僧,中途有最多就把钥匙,和最多五条蛇,要求就得唐僧并且拿到所有种类的钥匙(两个1只拿一个就行),拿钥匙i之前必须拿到钥匙i-1,打蛇多花费一秒,问救出唐僧并且拿到所有种类 ...

  10. 图论 用广搜搜邻接矩阵

    用广搜搜邻接矩阵 只是从某一点开始搜,如果是遍历全图的话就每个顶点挨个搜一遍 #include<stdio.h> #include<string.h> #include< ...

最新文章

  1. Groovy学习摘要
  2. Java格式化日期和时间模式占位符
  3. 16_Android生命周期再介绍,通过androidconfigChanges属性让界面旋转时不改变状态中保留的值
  4. java 并发 面试_Java 并发基础常见面试题总结
  5. EntityFramework_MVC4中EF5 新手入门教程之三 ---3.排序、 筛选和分页
  6. 警惕开源代码库中的安全隐患
  7. 计算机考研调剂规则,21考研调剂规则大变化,这类学生不能调剂!
  8. python爬虫入门四:BeautifulSoup库(转)
  9. 三支一扶计算机基础知识,2017聊城三支一扶考试内容-公基:计算机基础知识
  10. ubuntu下安装vmtool
  11. Linux下sdio设备扫描过程,[mmc]Linux下MMC/SD/SDIO的识别与操作
  12. html制作个人简历网页
  13. 如何给澳洲路局写信refound罚金,遇到交通罚款怎么办
  14. 计算机操作日志文件,教你完全读懂Windows日志文件
  15. java使用ajax请求下载excel响应结果显示乱码
  16. shell脚本编程大全
  17. guzzlehttp resulted in a `409 Conflict` response 访问网址 laravel thinkphp
  18. 题目59 考勤记录(ok)
  19. flex布局的应用 —— 模仿携程移动端的首页
  20. L2-005 集合相似度(STL)

热门文章

  1. 怎么把一些文件的打开方式变成未知应用程序
  2. 用Python爬取QQ音乐评论并制成词云图
  3. N32G430学习笔记1-工程模板建立
  4. srm32定时器的ETR功能
  5. C++:tuple的解包tie【tuple<std::string, int, int> tp;tie(name, ages, areaCode) = tp】
  6. 操作MySQL出错提示“BLOB/TEXT column used in key specification without a key length”解决办法
  7. form表单Get方式提交时,action中带参数传递不了
  8. 【TensorFlow】LSTM(基于PTB的自然语言建模)
  9. MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略
  10. 基于STM32设计的UNO卡牌游戏(双人、多人对战)