链接:https://ac.nowcoder.com/acm/contest/330/B
来源:牛客网
题目描述
精通程序设计的 Applese 又写了一个游戏。
在这个游戏中,它位于一个 n 行 m 列的方阵中的左上角(坐标为(0, 0),行的序号为0∼n−10∼n−1,列的序号为0∼m−10∼m−1)。
现在它想不重复地走过所有格子(除了起点),最后回到左上角的一个方案。
每次只能往上下左右其中一个方向走一格。
输入描述:
仅一行两个整数 n 和 m,表示方阵的大小。保证大于1×11×1。
输出描述:
如果存在方案,则输出一行操作,包含"L"、"R"、"U"、"D",分别表示左、右、上、下。
如果有多种方案,输出任意一种即可。如果没有方案,则在一行中输出"-1"。
示例1
输入
2 2
输出
RDLU
示例2
输入
2 3
输出
RRDLLU
备注:
1≤n,m≤10
这个题就是老老实实模拟就行了,总格子数是偶数的时候才能够走回去(如果是奇数一定走不回去,还有只有一行也走不回去),此题要注意1 2和2 1的情况。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<cstring>
#define pi 3.1415926
using namespace std;
typedef long long LL;
const int Max_n=100005;
char a[Max_n];
int main(){
int n,m;
scanf("%d%d",&n,&m);
if((n*m)%2==1){
printf("-1\n");
}else if(n==1||m==1){
if(n==1&&m==2)
printf("RL\n");
else if(n==2&&m==1)
printf("DU\n");
else
printf("-1\n");
}else{
if(n%2==0){
for(int i=1;i<=n;i++){
if(i==1){
for(int j=2;j<=m;j++)
printf("R");
}else if(i==n){
for(int j=2;j<=m;j++)
printf("L");
break;
}else{
if(i%2==1){
for(int j=3;j<=m;j++)
printf("R");
}else{
for(int j=3;j<=m;j++)
printf("L");
}
}
printf("D");
}
for(int j=2;j<=n;j++)
printf("U");
printf("\n");
}
if(n%2!=0&&m%2==0){
for(int i=1;i<=m;i++){
if(i==1){
for(int j=2;j<=n;j++)
printf("D");
}else if(i==m){
for(int j=2;j<=n;j++)
printf("U");
break;
}else{
if(i%2==1){
for(int j=3;j<=n;j++)
printf("D");
}else{
for(int j=3;j<=n;j++)
printf("U");
}
}
printf("R");
}
for(int i=2;i<=m;i++)
printf("L");
printf("\n");
}
}
return 0;
}