(BFS)Knight Moves(hdu1372)
题目:
在象棋王国,尼古拉斯.火山是一匹英俊的马,他非常幸运迎娶了白马王国的公主,他们将度蜜月,你现在是他们的女仆,火山会问你去一些地方最少需要多少步,这么简单的事当然难不倒你。由于火山是一匹马,他的移动方式将会遵守国际象棋马的走法。
输入:
输入包含一个或多个输入样例。每个测试样例将会有两个坐标,表示现在的位置和将要到达的地方,每个坐标包含一个字母(a-h)表示列和一个数字(1-8) 行,这意味这这个象棋王国是一个8* 8的矩形。
Input
输入包含一个或多个输入样例。每个测试样例将会有两个坐标,表示现在的位置和将要到达的地方,每个坐标包含一个字母(a-h)表示列和一个数字(1-8) 行,这意味这这个象棋王国是一个8* 8的矩形。
Output
每一组样例将会输出一段话 “To get from xx to yy takes n knight moves.”,其中xx表示起点,yy表示终点,n为xx到yy的最短步数。
Sample Input
e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6
Sample Output
To get from e2 to e4 takes 2 knight moves.
To get from a1 to b2 takes 4 knight moves.
To get from b2 to c3 takes 2 knight moves.
To get from a1 to h8 takes 6 knight moves.
To get from a1 to h7 takes 5 knight moves.
To get from h8 to a1 takes 6 knight moves.
To get from b1 to c3 takes 1 knight moves.
To get from f6 to f6 takes 0 knight moves.
分析与解答
基础bfs,主要是知道那个马是怎么走的,就是每次是需要怎么走,然后列和行转换成数字就行
#include<stdio.h>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int step;
int dir[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};
int map[10][10],ex,ey;
char s1[5],s2[5];
struct node
{ int x,y,step;
}; int bfs()
{ int i; memset(map,0,sizeof(map)); //标记数组 node st,ed; //队首 st.x = s1[0]-'a'; st.y = s1[1]-'1'; st.step = 0; ex = s2[0]-'a' ; //终点坐标 ey = s2[1]-'1'; queue<node> q;map[st.x][st.y] = 1; q.push(st); while(!q.empty()) { st = q.front(); q.pop(); if(st.x == ex && st.y == ey)//队首元素等于终点的话直接返回 {return st.step; } for(i = 0; i<8; i++) //变换八个位置 { ed.x = st.x+dir[i][0]; ed.y = st.y+dir[i][1]; if (ed.x>=0&&ed.x<8&&ed.y>=0&&ed.y<8&&map[ed.x][ed.y]==0) //没走过而且在棋盘内 { ed.step=st.step+1; map[ed.x][ed.y]=1; q.push(ed); } } } return 0;
} int main()
{ while(~scanf("%s%s",s1,s2)) //s1跑到s2 { printf("To get from %s to %s takes %d knight moves.\n",s1,s2,bfs()); } return 0;
}
(BFS)Knight Moves(hdu1372)相关推荐
- Knight Moves(信息学奥赛一本通-T1450)
[题目描述] 编写一个程序,计算一个骑士从棋盘上的一个格子到另一个格子所需的最小步数.骑士一步可以移动到的位置由下图给出. [输入] 第一行给出骑士的数量 n. 在接下来的 3n 行中,每 3 行描述 ...
- 广搜(BFS)和深搜(DFS)
广搜(BFS)和深搜(DFS) 文章目录 广搜(BFS)和深搜(DFS) 一.广搜(BFS) 二.深搜(DFS) 一.广搜(BFS) #include <bits/stdc++.h> us ...
- POJ 2243:Knight Moves(双向BFS)
http://poj.org/problem?id=2243 问题概述:一个8*8的棋盘,给定一个起点(列a-h,行1-8)和一个终点(列a-h,行1-8),按骑士的走法(走日字),从起点到 终点最少 ...
- 信息学奥赛一本通(1257:Knight Moves)
1257:Knight Moves 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6149 通过数: 3100 [题目描述] 输入nn代表有个n×n的棋盘 ...
- LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)
1. 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 b ...
- 【PTA】龙舌兰酒吧 (BFS求双源最短路)
目录 1.题目描述 2.输入输出 3.解题思路 4.样例解析 5.代码实现 1.题目描述 有一个大小为n*m的矩形小镇,城镇上有房屋("#"表示无法通过),有空地(".& ...
- WUST 2090 HLD与停车场(bfs||dfs||暴力模拟||巧妙思维)
2090: HLD与停车场 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld Submitted: 21 Accep ...
- Knight Moves(信息学奥赛一本通-T1257)
[题目描述] 输入n代表有个n×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步. [输入] 首先输入一个n,表示测试样例的个数. ...
- 【POJ - 3026】Borg Maze(bfs预处理 + 最小生成树,建图)
题干: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the gala ...
最新文章
- SAP HU上面的'Obj.to Which HU Belongs'栏位初探
- findHomography(src_points, dst_points, CV_RANSAC)
- Java高并发编程(六):重入锁
- SIGIR 2021 | 推荐系统中的多行为建模
- POJ 3259 Wormholes
- 快来加入阿里云大学【云学院】班级助理招募—机会稍纵即逝,错过遥遥无期!...
- CentOS安装yum 镜像 举例阿里云镜像
- jeesite使用心得(二)
- EhCache 常用配置项详解
- python实现单链表快速排序升序linkedqueue_LeetCode 总结 - 搞定 Linked List 面试题
- Java 设计模式之原型模式
- oracle sql列默认值,sql – Oracle:指定对象类型列的默认值
- 新冠疫情相似句对判定,快速匹配准确答案
- R语言学习笔记(1)
- 机器学习- 吴恩达Andrew Ng Week6 知识总结 Machine Learning System Design
- 关于网站速度优化的一点建议
- python colorbar刻度_python-如何添加Matplotlib Colorbar刻度
- CSGO开启跑图设置一看就会
- 热风枪焊接表面贴装元件的工具和技巧
- vue使用luckySheet前端excel的在线表格,导入显示以及导出excel文件
热门文章
- Oracle创建视图、通过视图创建表
- Android studio小问题解决
- 数据结构pta选择判断复习
- Intellij idea 出现错误 error:java: 无效的源发行版: 11解决方法
- linux ubuntu 编写c/c++ 获取命令行传入参数示例
- Spring整合JDBC开发
- linux每隔多久调度y,Linux 进程调度+Linux系统一般执行过程 笔记
- win10安装misql8_Windows10安装MySQL 8.0.11
- 制作 mysql的rpm文件_自制mysql.rpm安装包
- SpringCloud 超详细个人笔记