CF3A Shortest path of the king

题意翻译

国王独自一人在棋盘上。尽管他很孤独,但他并不会灰心,因为他有国家大事要做。例如,他必须对广场T进行正式访问。因为国王没有浪费时间的习惯,所以他想从目前的位置上尽量走最少的步数。请你帮他做这件事。

在一次移动中,国王可以到达有一个共同的边或一个共同的顶点的正方形上,(他通常可以移动到8个不同的方格上)。

输入格式 

第一行包含方形s的棋盘坐标,第二行包含平方t。

棋盘坐标由两个字符组成,第一个是小写拉丁字母(从a到h),第二个是从1到8的数字。

 

输出格式 

在第一行打印n - 国王移动的最小数量。然后在n行打印移动本身。每个移动用8:L,R,U,D,LU,LD,RU或RD中的一个来描述。

L,R,U,D分别针对左,右,上,下移动(根据图片),2字母组合代表对角线移动。如果答案不是唯一的,请打印其中的任何一个。

 

 输入输出样例

输入样例#1:
a8
h1
输出样例#1
7
RD
RD
RD
RD
RD
RD
RD

 

思路:

要输出总共需要的最少步数,则可以斜移的先斜移,再看王需要横移和竖移多少步,先把斜移的输出,在输出平移的。总步数就是斜移步数和平移步数的和。

 

代码:

#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
    int a,y;
    char c,x;
    scanf("%c%d\n%c%d",&c,&a,&x,&y);
    int t=abs(c-x),k=abs(a-y),n=min(t,k),m=n+abs(t-k);
    printf("%d\n",m);//总步数
    for(int i=1;i<=n;++i)//斜移
    {
        if(c<x)putchar('R'),c++;
        else putchar('L'),x++;
        if(a<y)puts("U"),a++;
        else puts("D"),y++;
    }
    for(int i=n;i<m;++i)//平移
        if(a<y)puts("U");
        else if(a>y)puts("D");
        else if(c<x)puts("R");
        else puts("L");
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值