牛客—Applese 走迷宫
模拟题,就是给出个m×n矩阵,从(0,0)开始,输出一种方案能够不重复得走完所有的点并且回到起点,没有的话输出-1。
掉了两个坑:
- 特殊情况:1行2列或2行1列,没有考虑这个也可以回到原点,以为只要是
m==1||n==1
就不能走了
- 没有考虑到别的走法,以至于以为
m%2==0
就不能走了
有一个还需要的优化的地方就是代码逻辑。
解析
主要是两种情况,当n%2==0
时,可以按照下面这种走法输出方案
当n%2!=0&&m%2==0
时,可以按照下面这种走法输出方案
其他情况都没有方案,输出-1
代码逻辑方面,有一部分都是一样的输出,所以可重复利用,如红色部分。所以可精简代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; if (n == 1) { if (m == 2) cout << "RL" << endl; else cout << -1 << endl; } else if (m == 1) { if (n == 2) cout << "DU" << endl; else cout << -1 << endl; } else if (n % 2 == 0) { cout << "R"; for (int i = 0; i < n; i += 2) { if (i) cout << "D"; for (int j = 1; j < m - 1; j++) cout << "R"; cout << "D"; for (int j = 1; j < m - 1; j++) cout << "L"; } cout << "L"; for (int i = 0; i < n - 1; i++) cout << "U"; cout << endl; } else if (m % 2 == 0) { cout << "D"; for (int i = 0; i < m; i += 2) { if (i) cout << "R"; for (int j = 1; j < n - 1; j++) cout << "D"; cout << "R"; for (int j = 1; j < n - 1; j++) cout << "U"; } cout << "U"; for (int i = 0; i < m - 1; i++) cout << "L"; cout << endl; } else cout << -1 << endl; return 0; }
|