链接: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
正解是模拟构造。用深搜容易爆时间,需要很好地优化。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int d[][]={,,,,,-,-,};//左下右上
char s[]="RDLU";
bool vis[][];
string res;
int n,m,num;
bool flag; bool check(int a,int b)//判断是否越界 1*1 到 n*m
{
if(a>= && a<=n && b>= && b<=m)
return true;
else
return false;
}
void dfs(int a,int b,string ans)
{
if(flag) return;///如果有一种情况符合要求,全局变量flag直接变成true,不要浪费时间继续搜
if(a== && b== && ans.size()==num)
{flag=true;cout<<ans<<endl;return;}
for(int i=;i<;i++)
{
int dx=a+d[i][];
int dy=b+d[i][];
if( check(dx,dy) && !vis[dx][dy] )//下个点符合要求
{
///ans=ans+s[i];错误的,不应该在外面加,会影响到下一个点的搜索
vis[dx][dy]=true;
dfs(dx,dy,ans+s[i]);//进入下一个点深搜
vis[dx][dy]=false;//搜完出来就当作没搜过这个点,尝试其他方向
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(vis,false,sizeof(vis));
flag=false;
num=n*m;
if(num%) printf("-1\n");
else
{
dfs(,,"");
//cout<<res<<endl;
if(!flag)
printf("-1\n");
}
}
return ;
}
 

Applese走方格-dfs的更多相关文章

  1. 牛客训练四:Applese 走方格(细节)

    题目链接:传送门 思路:主要是n=1,m=2或者n=2,m=1时,不是-1. #include<iostream> #include<cstdio> #include<c ...

  2. 牛客寒假算法基础集训营4 B applese 走方格

    链接:https://ac.nowcoder.com/acm/contest/330/B 构造题,但是有两个特判... 1  2 2  1 然后就水了,血亏 #include<stdio.h&g ...

  3. Applese走迷宫-bfs

    链接:https://ac.nowcoder.com/acm/contest/330/C来源:牛客网 题目描述 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn ...

  4. 机器人走方格 V3

    1120 . 机器人走方格 V3   基准时间限制:1 秒 空间限制:65536 KB 分值: 160 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在 ...

  5. 51nod1122 机器人走方格 V4

    矩阵快速幂求出每个点走n步后到某个点的方案数.然后暴力枚举即可 #include<cstdio> #include<cstring> #include<cctype> ...

  6. 51nod1120 机器人走方格 V3

    跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了.那么就是卡特兰数了.然后由于n和m太大所以用了lucas定理 //跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了 ...

  7. 51nod1119 机器人走方格 V2

    终于学到了求组合数的正确姿势 //C(n+m-2,m-1) #include<cstdio> #include<cstring> #include<cctype> ...

  8. 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题

    51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...

  9. 1119 机器人走方格 V2(组合)

    1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于 ...

随机推荐

  1. CF1133E K Balanced Teams(DP)

    /* 排序之后每个点往前能选择的是一段区间, 所以我们实际上转移位置是确定的 然后f[i][j]表示到了i选了j段的最大贡献, 显然状态数是O(n^2)的, 转移是O(1)的 */ #include& ...

  2. linux下mysql-5.6忘记root密码,重置root密码详细过程

      在linux平台下使用mysql过程中忘记了root密码,对于运维和DBA来讲都是一件头疼的事情,下面来讲解下怎么进行重置mysql数据库root 密码: 1.首先停止mysql服务进程: 1 s ...

  3. NodeJs安装以及注意事项

    1.测试NodeJs是否安装成功 node --version npm -v 配置node的可执行文件路径到环境变量path 2.安装相关环境 npm install express -g npm i ...

  4. python学习之----正则表达式

  5. [Lua]string与中文

    参考链接: https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81/8446880?fr=aladdin#7 http:// ...

  6. 6、申请发布(Distribution)证书和描述文件

    发布(Production)证书用于正式发布环境下使用,用于提交到Appstore审核发布. 申请发布(Production)证书 在“Certificates, Identifiers & ...

  7. gentoo AR9285 BCM57780 安装驱动

    首先使用启动光盘启动, 然后 mount /dev/sda4 /mnt/gentoo 挂载硬盘 lspci -v 1>/mnt/gentoo/root/lspci_v.txt 输出信息到文件. ...

  8. 《汇编语言 基于x86处理器》第七章整数运算部分的代码

    ▶ 书中第七章的程序,使用各种位移运算,加深了对内存.寄存器中整数类型变量存储的认识 ● 代码,双字数组右移 4 位 INCLUDE Irvine32.inc COUNT = ; 右移位数 .data ...

  9. linux系统安全更新

    um --security upgrade 一.参考文档:  https://blog.csdn.net/ubuntu64fan/article/details/80927212 二.Linux主机定 ...

  10. C# IIS 服务器上传图片500解决办法