Codeforces-A. Shortest path of the king(简单bfs记录路径)
A. Shortest path of the king
time limit per test
1 second
memory limit per test
64 megabytes
input
standard input
output
standard output
The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, because he has business of national importance. For example, he has to pay an official visit to square t. As the king is not in habit of wasting his time, he wants to get from his current position s to square t in the least number of moves. Help him to do this.

In one move the king can get to the square that has a common side or a common vertex with the square the king is currently in (generally there are 8 different squares he can move to).
Input
The first line contains the chessboard coordinates of square s, the second line — of square t.
Chessboard coordinates consist of two characters, the first one is a lowercase Latin letter (from a to h), the second one is a digit from 1 to 8.
Output
In the first line print n — minimum number of the king's moves. Then in n lines print the moves themselves. Each move is described with one of the 8: L, R, U, D, LU, LD, RU or RD.
L, R, U, D stand respectively for moves left, right, up and down (according to the picture), and 2-letter combinations stand for diagonal moves. If the answer is not unique, print any of them.
Examples
input
a8
h1
output
7
RD
RD
RD
RD
RD
RD
RD
解题思路:一个8*8的图,8个方向移动,字符转化为数字表示,bfs记录路径最短路径,到达目标点即遍历结束,记录路径,路径移动方向转变为题中的字符方向。
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <stdio.h>
#include <queue>
using namespace std;
int d_x[4] = { 0, 1, -1 };
int d_y[4] = { 0, 1, -1 };
int e[10][10], book[10][10];
int next[2][10000];
int end_xx[10000],end_yy[10000];
int sum;
int start_x, start_y, end_x, end_y;
struct node {
int pre;
int x, y;
int step;
};
node qt[10000];
void conversion(int x,int y){
if(x==1){
cout<<"R";
}else if(x==-1){
cout<<"L";
}
if(y==-1){
cout<<"D";
}else if(y==1){
cout<<"U";
}
}
void bfs() {
int head = 1;
int tail = 1;
node q;
q.x = start_x;
q.y = start_y;
q.pre = head;
q.step = 0;
qt[tail] = q;
qt[tail].pre = head;
tail++;
queue<node> qq;
qq.push( q );
while( !qq.empty() ) {
node temp = qq.front();
head = temp.pre;
// cout<<"head = "<<head<<endl;
if( temp.x == end_x && temp.y == end_y ) {
int xx = temp.x;
int yy = temp.y;
sum = 0;
// cout<<"temp.pre = "<<temp.pre<<endl;
int t = qt[temp.pre].pre;
// cout<<"t ="<<t<<endl;
while(true){
// cout<<sum<<endl;
end_xx[sum] = xx-qt[t].x;
end_yy[sum] = yy-qt[t].y;
sum++;
xx = qt[t].x;
yy = qt[t].y;
if(t==1) break;
t = qt[t].pre;
}
break;
}
for(int i=0;i<3;i++){
for(int j =0;j<3;j++){
if(i==0 && j==0) continue;
int dx = temp.x + d_x[i];
int dy = temp.y + d_y[j];
if(dx>8 || dy>8 || dx<1 || dy<1) continue;
if(book[dx][dy]==0 ){
book[dx][dy] = 1;
node tt;
tt.x = dx;
tt.y = dy;
tt.pre = tail;
tt.step = temp.step+1;
qt[tail] = tt;
qt[tail].pre = head;
tail++;
qq.push(tt);
}
}
}
qq.pop();
}
return;
}
int main() {
char start[2];
char end[2];
while(cin>>start[0]>>start[1]>>end[0]>>end[1]){
start_x = start[0]-'a'+1;
start_y = start[1]-'0';
end_x = end[0]-'a'+1;
end_y = end[1]-'0';
// cout<<start_x<<" "<<end_x<<endl;
//
// cout<<start_y<<" "<<end_y<<endl;
if(start_x == end_x && start_y == end_y) {
cout<<"0"<<endl;
continue;
}
memset( book, 0, sizeof( book ) );
book[start_x][start_y] = 1;
bfs();
cout<<sum<<endl;
for( int i = sum-1 ; i >= 0; i-- ) {
// cout<<end_xx[i]<<" "<<end_yy[i]<<endl;
conversion( end_xx[i], end_yy[i] );
cout<<endl;
}
}
return 0;
}
Codeforces-A. Shortest path of the king(简单bfs记录路径)的更多相关文章
- Codeforces 3A-Shortest path of the king(BFS打印路径)
A. Shortest path of the king time limit per test 1 second memory limit per test 64 megabytes input s ...
- node搜索codeforces 3A - Shortest path of the king
发一下牢骚和主题无关: 搜索,最短路都可以 每日一道理 人生是洁白的画纸,我们每个人就是手握各色笔的画师:人生也是一条看不到尽头的长路,我们每个人则是人生道路的远足者:人生还像是一块神奇的土地 ...
- Codeforces Beta Round #3 A. Shortest path of the king 水题
A. Shortest path of the king 题目连接: http://www.codeforces.com/contest/3/problem/A Description The kin ...
- (简单) POJ 3414 Pots,BFS+记录路径。
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- Codeforces Beta Round #3 A. Shortest path of the king
标题效果: 鉴于国际棋盘两点,寻求同意的操作,是什么操作的最小数量,在操作过程中输出. 解题思路: 水题一个,见代码. 以下是代码: #include <set> #include < ...
- A - Shortest path of the king (棋盘)
The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, becaus ...
- Shortest path of the king
必须要抄袭一下这个代码 The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose h ...
- Codeforces 938G Shortest Path Queries [分治,线性基,并查集]
洛谷 Codeforces 分治的题目,或者说分治的思想,是非常灵活多变的. 所以对我这种智商低的选手特别不友好 脑子不好使怎么办?多做题吧-- 前置知识 线性基是你必须会的,不然这题不可做. 推荐再 ...
- CF3A Shortest path of the king
The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, becaus ...
随机推荐
- Grunt中批量无损压缩图片插件--grunt-sprite
这是什么 这是一个帮助前端开发工程师将css代码中的切片合并成雪碧图的工具,它的主要功能是: 使用二叉树排列算法,对css文件进行处理,收集切片序列,生成雪碧图 在原css代码中为切片添加backgr ...
- iOS中break、continue、return三者的区别
iOS中break.continue.return三者的区别 1. break 直接跳出当前层次的循环. 如果嵌套循环如for中嵌套while,break只能跳出内层的while循环, ...
- [Medium翻译]RESTful API权威设计指南-设计更好的API
本文为授权译文.希望查看原文的同学请戳链接:https://hackernoon.com/restful-api-design-step-by-step-guide-2f2c9f9fcdbf 对于我们 ...
- 我的前端工具集(八)获得html元素在页面中的位置
我的前端工具集(八)获得html元素在页面中的位置 liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候需要用点击等操作,来获取某元素在页面中的位置,然后在该位置添加某些操作 如 ...
- L2-001 紧急救援(dijkstra算法)
题目: 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市 ...
- MySQL---数据表基本操作(增删改查、排序、分组、连表)
一.表操作 1.创建表 create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8 是否可空,nul ...
- 常用关于时间的一些设置。获取当前时间后30天;判断时间段一年内;Date转String,String转Date
//获取当前时间后30天(之前也可),天数不限可修改1 var data = new Date(); var date1 = newe Date(date); date2 = date1.se ...
- Redis(三):Redis数据类型
Redis数据类型目录导航: Redis五大数据类型 哪里去获取Redis常见数据类型操作命令 Redis键(Key) Redis字符串(String) Redis列表(List) Redis集合(S ...
- 【Flume】数据采集引擎Flume
一.概述 flume是一个高效的.可靠的.可用的分布式海量日志数据收集.聚合.传输的工具. Flume is a distributed, reliable, and available servic ...
- 用树莓派做电视盒子,安装Android TV系统
有位朋友问我,如何在树莓派上安装盒子系统,这期我就教大家如何安装Android系统,自动动手做一个机顶盒. 如何安装系统,我已经在 树莓派安装系统 这篇文章中了做介绍,有需要的请看这篇文章.安装系统需 ...