信息学奥赛一本通(1330:【例8.3】最少步数)
1330:【例8.3】最少步数
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 10314 通过数: 5549
【题目描述】
在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(100×100)的围棋盘上任选两点A、B,A点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左上角坐标为(1,1)的点时,谁获胜。现在他请你帮忙,给你A、B两点的坐标,想知道两个位置到(1,1)点可能的最少步数。
【输入】
A、B两点的坐标。
【输出】
最少步数。
【输入样例】
12 16 18 10
【输出样例】
8 9
【分析】
马有 12 种不同的扩展方向∶
(1)马走"日"∶(x-2,y-1)、(x-1,y-2)、(x-2,y+1)、(x-1,y+2)、(x+2,y-1)、(x+1,y-2)、(x+2, y+1)、(x+1,y+2)
(2)马走"田":(x-2,y-2)、(x-2.y+2)、(x+2,y-2)、(x+2,y+2)。
表示为:
int dx[12]={-2,-2,-1,1,2,2,2,2,1,-1,-2,-2},
int dy[12]={-1,-2,-2,-2,-2,-1,1,2,2,2,2,1};
【参考代码】
C代码:
#include <stdio.h>
#include <string.h>int dx[12]={-2,-2,-1,1,2,2,2,2,1,-1,-2,-2}; // 位移数组
int dy[12]={-1,-2,-2,-2,-2,-1,1,2,2,2,2,1};int main()
{int s[101][101]; // 记录最少步数 int que[10000][4]={0}; // 队列数组,存储可到达的点 int x1,y1; // 黑马所在点 int x2,y2; // 白马所在点int head=1,tail=1; // 初始位置入队int i;int x,y;memset(s,-1,sizeof(s)); // s数组的初始化 que[1][1]=1;que[1][2]=1;que[1][3]=0;scanf("%d%d%d%d",&x1,&y1,&x2,&y2); // 读入黑马白马的出发位置 // bfswhile(head<=tail) // 若队列非空,则扩展队首结点 {for(i=0;i<12;i++) // 枚举12个扩展方向{x=que[head][1]+dx[i]; // 计算马按 i 方向跳跃后的位置 y=que[head][2]+dy[i];if(x>0 && y>0){if(s[x][y]==-1) // 若(x,y)满足约束条件 {s[x][y]=que[head][3]+1; // 计算(1,1)到(x,y)的最少步数 tail++; // (1,1)至(x,y)的最少步数入队 que[tail][1]=x;que[tail][2]=y;que[tail][3]=s[x][y];if(s[x1][y1]>0 && s[x2][y2]>0) // 输出问题的解 {printf("%d\n%d\n",s[x1][y1],s[x2][y2]);return 0;}}}}head++;}return 0;
}
C++代码:
#include <iostream>
#include <queue>
#include <cstring>using namespace std;struct node
{int x,y; // 坐标 int step; // 到该结点的步数
};int dx[12]={-2,-2,-1,1,2,2,2,2,1,-1,-2,-2}; // 位移数组
int dy[12]={-1,-2,-2,-2,-2,-1,1,2,2,2,2,1};int main()
{int a[101][101]; // 记录最少步数 int que[10000][4]={0}; // 队列数组,存储可到达的点 int x1,y1; // 黑马所在点 int x2,y2; // 白马所在点 queue <node> q; // 申请队列 node start,news;memset(a,-1,sizeof(a)); //a数组的初始化start.x=1; // 初始化起点 start.y=1;start.step=0; q.push(start); // 起始点入队cin>>x1>>y1>>x2>>y2; //读入白马和黑马的出发位置while(!q.empty()) //若队列非空,则扩展队首结点{start=q.front();q.pop();for(int d=0;d<12;d++) //枚举12个扩展方向{int newx,newy,st;newx=start.x+dx[d]; //计算马按d方向跳跃后的位置newy=start.y+dy[d];if(newx>0 && newy>0 && newx<=100 && newy<=100){if(a[newx][newy]==-1) //若(x,y)满足约束条件{a[newx][newy]=start.step+1; //计算(1,1)到(x,y)的最少步数news.x=newx;news.y=newy;news.step=a[newx][newy];q.push(news);if(a[x1][y1]>0 && a[x2][y2]>0) //输出问题的解{cout<<a[x1][y1]<<endl;cout<<a[x2][y2]<<endl;return 0;}}}}}return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1330
信息学奥赛一本通(1330:【例8.3】最少步数)相关推荐
- 【例8】合唱队形(《信息学奥赛一本通第五版》)
/* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...
- 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制
[题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...
- 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02
/* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...
- 信息学奥赛一本通 2021:【例4.6】最大公约数
[题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...
- 信息学奥赛一本通(2032:【例4.18】分解质因数)
2032:[例4.18]分解质因数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 582 通过数: 376 [题目描述] 把一个合数分解成若干个质因数乘积 ...
- 信息学奥赛一本通——2062:【例1.3】电影票
2062:[例1.3]电影票 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 57341 通过数: 34230 [题目描述] 已知一位小朋友的电影票价是10 ...
- 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)
[题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...
- 信息学奥赛一本通C++语言-----2036:【例5.3】开关门
[题目描述] 宾馆里有n(2≤n≤1000)n(2≤n≤1000) 个房间,从1∼n1∼n 编了号.第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是22 的倍数的房间"相反处理& ...
- 信息学奥赛一本通——2068:【例2.6】鸡兔同笼
大家好(๑╹◡╹)ノ" 这里是小蒟蒻 一天没更新了呢! 今天给大家带来<信息学奥赛一本通--2068:[例2.6]鸡兔同笼> 题目: 2068:[例2.6]鸡兔同笼 时间限制: ...
- 信息学奥赛一本通C++语言-----2048:【例5.18】串排序
[题目描述] 对给定的n(1≤n≤20)n(1≤n≤20)个国家名(国家名字长度不超过2020),按其字母的顺序输出. [输入] 第一行为国家的个数nn: 以下nn行为国家的名字. [输出] nn行, ...
最新文章
- python开发环境anaconda_搭建Python开发环境,用Anaconda + PyQt + Pycharm
- 【术语扫盲】SKD 半散装件
- DNS详解: A记录,子域名,CNAME别名,PTR,MX,TXT,SRV,TTL
- MATLAB快速拟合二组数据
- 中关键字 表示空类型_C语言数据类型
- 牛客14607 递推(矩阵快速幂构造)
- SQL2005删除用户的时候,产生“数据库主体在该数据库中拥有架构,无法删除”的解决办法...
- 无法解析的外部符号+_mysql_fetch_row_vs连接mysql出现以下错误,求解答,谢谢,不胜感激...
- 数据中心智能化运维之路
- Abp vnext 特征(Features)
- zookeeper:Too many connections 故障处理记录
- [数据集]新浪微博数据集MicroblogPCU
- 【图像融合】基于matlab GUI像素点图像融合【含Matlab源码 783期】
- selenium学习第一步(firefox安装firebug和firepath插件)
- 带你玩转 3D 检测和分割(一):MMDetection3D 整体框架介绍
- python编写安装脚本_ido-Python 安装脚本包
- 超文本传输协议 - 白话篇
- 数据库之考勤管理系统
- 盘点营销策划案例之2019年沙雕广告!
- linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (一)