为了能到远方,脚下的每一步都不能少。|

larryyu_blog

园龄:2年5个月粉丝:5关注:17

2023-01-12 09:59阅读: 37评论: 2推荐: 1

AT2282 [ABC051C] Back and Forth 题解

Description

在一个平面直角坐标系内,有一点 A(x1,y1) 和点 B(x2,y2) 你需要从 A 点走到 B 点,再走到 A 点,再走到 B 点,再回到 A 点。期间,你只能沿网格线走,除 A,B 点,其他任一格点都只能走一次,求最短路径(输出以 U,R,D,L 组成的字符串)。

Solution

如图,方格内的任意一条路径都相等,即3条灰线长度相等,且为 A,B 两点间最短路径。

但两红线在一来回后都有且仅有1次走过,所以,第二来回不能再走方格内的任一一条路径。

黄橙两线即为方格外最短路径,正确性显然。

输出四种方向即可。

Code

#include<bits/stdc++.h>
using namespace std;
int sx,sy,tx,ty;
int cx,cy;
int main(){
    cin>>sx>>sy>>tx>>ty;
    cx=tx-sx;
    cy=ty-sy;
    for(int i=1;i<=cy;i++){
        cout<<"U";
    }
    for(int i=1;i<=cx;i++){
        cout<<"R";
    }
    for(int i=1;i<=cy;i++){
        cout<<"D";
    }
    for(int i=1;i<=cx;i++){
        cout<<"L";
    }
    cout<<"L";
    for(int i=1;i<=cy+1;i++){
        cout<<"U";
    }
    for(int i=1;i<=cx+1;i++){
        cout<<"R";
    }
    cout<<"DR";
    for(int i=1;i<=cy+1;i++){
        cout<<"D";
    }
    for(int i=1;i<=cx+1;i++){
        cout<<"L";
    }
    cout<<"U";
    return 0;
}

完结撒花!!

本文作者:larryyu_blog

本文链接:https://www.cnblogs.com/larryyu/p/17045639.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   larryyu_blog  阅读(37)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起