链接:https://ac.nowcoder.com/acm/contest/330/B
来源:牛客网
精通程序设计的 Applese 又写了一个游戏。
在这个游戏中,它位于一个 n 行 m 列的方阵中的左上角(坐标为(0, 0),行的序号为0∼n−1,列的序号为0∼m−1)。
现在它想不重复地走过所有格子(除了起点),最后回到左上角的一个方案。
每次只能往上下左右其中一个方向走一格。
输入描述:
仅一行两个整数 n 和 m,表示方阵的大小。保证大于1×1。
输出描述:
如果存在方案,则输出一行操作,包含"L"、"R"、"U"、"D",分别表示左、右、上、下。如果有多种方案,输出任意一种即可。
如果没有方案,则在一行中输出"-1"。
示例1
输入
复制
2 2
输出
复制
RDLU
示例2
输入
复制
2 3
输出
复制
RRDLLU
备注:
1≤n,m≤10
行n为偶数:
列m为偶数:
注意 1行2列和2行1列的特殊情况
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f;
const int maxn=2e5+5;
int T,n,m;
int main() {
scanf("%d%d",&n,&m);
if(n==1&&m==2){
puts("RL");
}
else if(n==2&&m==1){
puts("DU");
}
else if(n==1||m==1){
puts("-1");
}
else if(!(n&1)){
putchar('R');
for(int i=1;i<=n;i++){
if(i&1)
for(int j=2;j<m;j++)
putchar('R');
else
for(int j=2;j<m;j++)
putchar('L');
if(i!=n)
putchar('D');
}
putchar('L');
for(int j=1;j<n;j++)
putchar('U');
}
else if(!(m&1)){
putchar('D');
for(int i=1;i<=m;i++){
if(i&1)
for(int j=2;j<n;j++)
putchar('D');
else
for(int j=2;j<n;j++)
putchar('U');
if(i!=m)
putchar('R');
}
putchar('U');
for(int i=1;i<m;i++)
putchar('L');
}
else puts("-1");
return 0;
}