跳马周游c++_C++——跳马问题(广搜)
跳马
时限: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++——跳马问题(广搜)相关推荐
- Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...
- 搜索:广搜 词语阶梯
问题描述以及解决过程如下导图 广搜实现如下 #include <iostream> #include <algorithm> #include <vector> # ...
- [NC23486]小A与小B 双向广搜
题解:这个题属于走迷宫类型问题的一个升级版吧,不同之处在于一秒钟小A走一步,小B可以走两步,这两种事件是同时发生的,所以我们每秒钟让A扩散一步,让B扩散两步. 两个人走过的路径分别用 visited[ ...
- 【图论专题】BFS中的双向广搜 和 A-star
双向广搜 AcWing 190. 字串变换 #include <cstring> #include <iostream> #include <algorithm> ...
- [数据结构] 迷宫问题(栈和队列,深搜和广搜)
代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...
- UVA 122 Trees on the level 二叉树 广搜
题目链接: https://vjudge.net/problem/UVA-122 题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not comple ...
- hrbust 1616 密码锁(广搜)
分析:广搜,每个四位数作为一个状态,从每个状态扩展出其他的几种状态并累加步数之后加入队列. 1 #include <stdio.h> 2 #include <string.h> ...
- [kuangbin] M - Find a way(简单广搜)
题目链接:https://vjudge.net/contest/215603#problem/M 其中三维数组dis将两个广搜合并到了一起 #include<iostream> #incl ...
- hdu5025 状态压缩广搜
题意: 悟空要救唐僧,中途有最多就把钥匙,和最多五条蛇,要求就得唐僧并且拿到所有种类的钥匙(两个1只拿一个就行),拿钥匙i之前必须拿到钥匙i-1,打蛇多花费一秒,问救出唐僧并且拿到所有种类 ...
- 图论 用广搜搜邻接矩阵
用广搜搜邻接矩阵 只是从某一点开始搜,如果是遍历全图的话就每个顶点挨个搜一遍 #include<stdio.h> #include<string.h> #include< ...
最新文章
- Groovy学习摘要
- Java格式化日期和时间模式占位符
- 16_Android生命周期再介绍,通过androidconfigChanges属性让界面旋转时不改变状态中保留的值
- java 并发 面试_Java 并发基础常见面试题总结
- EntityFramework_MVC4中EF5 新手入门教程之三 ---3.排序、 筛选和分页
- 警惕开源代码库中的安全隐患
- 计算机考研调剂规则,21考研调剂规则大变化,这类学生不能调剂!
- python爬虫入门四:BeautifulSoup库(转)
- 三支一扶计算机基础知识,2017聊城三支一扶考试内容-公基:计算机基础知识
- ubuntu下安装vmtool
- Linux下sdio设备扫描过程,[mmc]Linux下MMC/SD/SDIO的识别与操作
- html制作个人简历网页
- 如何给澳洲路局写信refound罚金,遇到交通罚款怎么办
- 计算机操作日志文件,教你完全读懂Windows日志文件
- java使用ajax请求下载excel响应结果显示乱码
- shell脚本编程大全
- guzzlehttp resulted in a `409 Conflict` response 访问网址 laravel thinkphp
- 题目59 考勤记录(ok)
- flex布局的应用 —— 模仿携程移动端的首页
- L2-005 集合相似度(STL)
热门文章
- 怎么把一些文件的打开方式变成未知应用程序
- 用Python爬取QQ音乐评论并制成词云图
- N32G430学习笔记1-工程模板建立
- srm32定时器的ETR功能
- C++:tuple的解包tie【tuple<std::string, int, int> tp;tie(name, ages, areaCode) = tp】
- 操作MySQL出错提示“BLOB/TEXT column used in key specification without a key length”解决办法
- form表单Get方式提交时,action中带参数传递不了
- 【TensorFlow】LSTM(基于PTB的自然语言建模)
- MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略
- 基于STM32设计的UNO卡牌游戏(双人、多人对战)