九度oj 题目1365:贝多芬第九交响曲
-
现在在一块空的场地上会有一个大的二维棋盘,裁判会给你指定初始位置及一座贝多芬雕像所处的位置,你开始时就站在裁判指定的初始位置处,你的目标是跳到贝多芬雕像的位置。为了给比赛增加一定的难度,你在棋盘上行走时,必须按照中国象棋中的马的走步方式来走。玩过中国象棋的人都知道,马走“日”,象走“田”。最后,你只需要告诉裁判最少多少步能到达贝多芬的雕像。如果根本就到不了贝多芬的雕像处,你直接告诉裁判就可以了。
玄影游侠站在棋盘的某一个位置,不知道该如何走,他知道你们都学过程序设计,所以想请你们帮帮忙编一个程序来帮助他找到想要到达贝多芬的雕像处所需要的最少的步数。
- 输入:
-
每组测试数据可能有多组输入,对于每一组输入,
输入的第一行包括一个整数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:贝多芬第九交响曲的更多相关文章
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 九度OJ题目1003:A+B
while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...
随机推荐
- userBean设置属性2
package com.java.model; public class Student { private String name;private int age; public String ge ...
- js使用my97插件显示当前时间,且select控制计算时间差
做页面需要两个时间输入框一个显示当前时间,一个显示之前的时间,并且需要一个select下拉框控制两个时间输入框之间的差,效果如下图: 这里使用的是My97DatePicer,简单方便,引入my97插件 ...
- python爬虫之路——初识函数与控制语句
介绍python函数的定义与使用方法,介绍Python的常用控制语句:判断和循环 函数: 格式 def 函数名(参数1,参数2): return ‘结果’ 判断语句:就是多选一 二选一: if c ...
- Core Data stack
https://developer.apple.com/library/content/documentation/DataManagement/Devpedia-CoreData/coreDataS ...
- pycharm创建工程的两种形式:virtualenv环境和系统默认编译器
转自:http://swiftlet.net/archives/3151 pycharm创建工程的时候可以选择编译器,如下图所示: 上图表示创建工程有两种方式:第一种是利用:virtualenv,第二 ...
- 实验1 c语言最基本内容
part 1 验证性内容 总结:经受了数组和结构体的双重折磨后,发现这部分好简单...现在没啥问题了... part 2 补全程序 1.判断奇偶 // 程序功能: // 要求用户从键盘输入一个整数 ...
- tcp 高性能服务, netty,mqtt
1. io 线程不要有比较长的服务. 全部异步化. [1] netty 权威指南上只是说业务复杂时派发到业务线程池种. 共用的线程池最好都轻量. 多层线程池后, 下层的可以进行隔离. 这个是 mqtt ...
- stataic 变量
static 是静态变量的的类型说明符 静态变量属于静态存储方式,(外部变量也是静态存储方式) 静态的局部变量 静态局部变量属于静态存储方式,它具有以下特点: (1)静态局部变量在函数内定义 它的生存 ...
- ES6 -- 模板字符串(反单引号)
1)直接使用变量 // before var str = 'test'; console.log(str + "123"); // now var str = 'test'; co ...
- 【NOIP提高A组模拟2018.8.14】 区间
区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...