现在在一块空的场地上会有一个大的二维棋盘,裁判会给你指定初始位置及一座贝多芬雕像所处的位置,你开始时就站在裁判指定的初始位置处,你的目标是跳到贝多芬雕像的位置。为了给比赛增加一定的难度,你在棋盘上行走时,必须按照中国象棋中的马的走步方式来走。玩过中国象棋的人都知道,马走“日”,象走“田”。最后,你只需要告诉裁判最少多少步能到达贝多芬的雕像。如果根本就到不了贝多芬的雕像处,你直接告诉裁判就可以了。

玄影游侠站在棋盘的某一个位置,不知道该如何走,他知道你们都学过程序设计,所以想请你们帮帮忙编一个程序来帮助他找到想要到达贝多芬的雕像处所需要的最少的步数。

输入:

每组测试数据可能有多组输入,对于每一组输入,

输入的第一行包括一个整数N(1<=N<=100),代表棋盘的大小是N*N。

输入的第二行包括四个数start_x, start_y, end_x, end_y(1 <= start_x,start_y,end_x,end_y <= N),分别代表你开始时的位置的x坐标和y坐标以及贝多芬雕像的x坐标和y坐标。

输出:

如果你能够到达贝多芬雕像的位置,请输出最少需要多少步。

如果不能到达,则输出-1。

样例输入:
3
1 1 3 2
3
1 1 2 2
样例输出:
1
-1
用广度优先搜索即可
 #include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
int n;
int sx,sy,ex,ey;
int dir[][] = {{,},{,},{,-},{,-},{-,-},{-,-},{-,},{-,}};
typedef pair<int ,int> P;
queue <P> que;
int step[][];
int ans; void bfs() {
while(!que.empty()) {
P tmp = que.front(); que.pop();
int cnt = step[tmp.first][tmp.second];
if(tmp.first == ex && tmp.second == ey) {
ans = cnt-;
break;
}
for(int i = ; i < ; i++) {
int x = dir[i][] + tmp.first;
int y = dir[i][] + tmp.second;
if(x >= && y >= && x <= n && y <= n && step[x][y] == ) {
que.push(P(x, y));
step[x][y] = cnt + ;
}
}
}
}
int main(int argc, char const *argv[])
{
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
scanf("%d %d %d %d",&sx,&sy,&ex,&ey);
memset(step, , sizeof(step));
P start = P(sx, sy);
step[sx][sy] = ; while(!que.empty()) {
que.pop();
}
que.push(start);
ans = -;
bfs();
printf("%d\n",ans);
}
return ;
}

九度oj 题目1365:贝多芬第九交响曲的更多相关文章

  1. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  2. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  4. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  5. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  6. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  7. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  8. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

  9. 九度OJ题目1003:A+B

    while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...

随机推荐

  1. Redis哨兵原理详解

    一.概述 Redis哨兵(以下称哨兵)是为Redis提供一个高可靠解决方案,对一定程序上的错误,可以不需要人工干预自行解决. 哨兵功能还有监视.事件通知.配置功能.以下是哨兵的功能列表: 监控:不间断 ...

  2. AdonisJs(Node框架)学习总结

    先列出作为前端开发人员必须知道的10个NodeJs框架  AdonisJs 一个服务端渲染的MVC框架,它是 Laravel (PHP框架)的一个 NodeJS 版本. 可以安装脚手架工具adonis ...

  3. UVA 1451 Average平均值 (数形结合,斜率优化)

    摘要:数形结合,斜率优化,单调队列. 题意:求一个长度为n的01串的子串,子串长度至少为L,平均值应该尽量大,多个满足条件取长度最短,还有多个的话,取起点最靠左. 求出前缀和S[i],令点Pi表示(i ...

  4. UVA10410 TreeReconstruction 树重建 (dfs,bfs序的一些性质,以及用栈处理递归 )

    题意,给你一颗树的bfs序和dfs序,结点编号小的优先历遍,问你可能的一种树形: 输出每个结点的子结点. 注意到以下事实: (1)dfs序中一个结点的子树结点一定是连续的. (2)bfs,dfs序中的 ...

  5. groupadd - 建 立 新 群 组

    总览 SYNOPSIS groupadd [-g gid [-o]] [-r] [-f] group 描述 DESCRIPTION groupadd 可 指 定 群 组 名 称 来 建 立 新 的 群 ...

  6. 分类回归树(CART)

    概要 本部分介绍 CART,是一种非常重要的机器学习算法.   基本原理   CART 全称为 Classification And Regression Trees,即分类回归树.顾名思义,该算法既 ...

  7. HTML5<figure>元素

    HTML5<figure>元素是用来定义页面文档中独立的流内容(图像,图表,照片,代码块),figure内容与主内容有关,如果被删除,则不影响主文档流的产生. HTML5<figca ...

  8. Neural Style论文笔记+源码解析

    引言 前面在Ubuntu16.04+GTX1080配置TensorFlow并实现图像风格转换中介绍了TensorFlow的配置过程,以及运用TensorFlow实现图像风格转换,主要是使用了文章A N ...

  9. NOIP2016 toy

    题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...

  10. NOIP模拟赛 麻将

    [题目描述] 众所周知,麻将是我们国家的国粹.这段时间,小D也迷上了麻将这个老少皆宜的游戏. 小D觉得这些不同规则的麻将太麻烦了,所以他集合了很多种麻将规则创造出了一套D麻将.下面是D麻将的几个特点: ...