袋鼠妈妈找孩子

Time limit per test: 1.5 seconds

Time limit all tests: 10.0 seconds

Memory limit: 256 megabytes

袋鼠妈妈找不到她的孩子了。她的孩子被怪兽抓走了。

袋鼠妈妈现在在地图的左上角,她的孩子在地图第 x 行第 y 列的位置。怪兽想和袋鼠妈妈玩一个游戏:他不想让袋鼠妈妈过快地找到她的孩子。袋鼠妈妈每秒钟可以向上下左右四个方向跳一格(如果没有墙阻拦的话),怪兽就要在一些格子中造墙,从而完成一个迷宫,使得袋鼠妈妈能够找到她的孩子,但最快不能小于 k 秒。

请设计这样一个迷宫。

Input

第一行两个整数 n,m (1≤n,m≤8),表示地图的总行数和总列数。

第二行三个整数 x,y,k (1≤x≤n,1≤y≤m,x+y>1)。

Output

输出一个地图,应正好 n 行 m 列。

用 . 表示空地,用 * 表示墙。袋鼠妈妈所在的位置和孩子所在的位置用 . 表示。

数据保证有解。

Examples

input
2 6
1 3 4

output
.*.***
......

比赛的时候出题人发布了公告,说这个题目是多组答案,只要给出任意一个符合条件的答案,都会判为正确。

官方题解:

C. 袋鼠妈妈找孩子

由于数据范围很小,直接搜索就可以了。考虑 DFS,每一个要走的格子,周围最多只能有一格(其实就是走过来的那一格)是走过的。全部搜一遍就结束了。

出题人:过的人少得不可思议。

比赛的时候没有做出来,然后看了官方给的题解之后,有了思路。

思路详述:

暴力求解,搜索一条路径,其从起点到终点的时间大于等于k。当然这个路不是随便选的,走哪是需要条件判断的。为了让袋鼠妈妈沿着我深搜的符合条件的路径走,

我需要采取一些措施,措施如下,假设当前袋鼠妈妈的位置为(x,y),假设她下一秒往右走,那么我就要把(x,y)位置的上方,下方,左方都设成墙,这样的话,

她别无选择了,只能往右走了,同时保留其他三个方向的原始状态,因为回溯的时候还要恢复那三个点的状态。也就是说,搜索方向有四个,如果朝某个方向走,

则除该方向外的其他方向直接封锁,一直这样进行下去,直到找到一条符合条件的路径。在深搜中定义flag变量,标记是否已经找到一组解,当找到第一个符合

条件的解的时候,就把flag变成true.在深搜开始的时候,就先判断flag的值,如果,flag已经是true了,直接返回即可,题目只要一组解,找到解后继续搜索并没有什么

意义而且也浪费时间。

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;const int maxn = 10;
int Map[maxn][maxn];
int dir[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
///搜索方向上、右、下、左。
int n,m;
int x,y,k;
bool flag;
///用于标记是否已经找到可行解。
/**以sx,sy为新起点进行搜索,并且从起点到(sx,sy)
已经走了step步**/
void dfs(int sx,int sy,int step)
{int a[5]; if(flag)          ///有一组可行解return;Map[sx][sy] = 1;  ///标记为1,代表这个位置走过了。if(sx == x && sy == y)  ///到达目标{if(step >= k)       ///如果步数大于等于k,是解。{///直接输出地图,flag变为truefor(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){if(Map[i][j]==1 || Map[i][j]==0)printf(".");elseprintf("*");}printf("\n");}flag = true;}return;  ///找没找到解都要返回}for(int i = 0; i < 4; i++)  ///进行四个方向的搜索{int tx = sx + dir[i][0];int ty = sy + dir[i][1];if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&Map[tx][ty]==0){/**为了让袋鼠妈妈走tx,ty这一点,我要逼她无路可走,让她只能从(sx,sy)走到(tx,ty),因此封锁(sx,sy)周围除(tx,ty)以外的其他点**/for(int j = 0; j < 4; j++)  {if(i == j) continue;int tempx = sx + dir[j][0];int tempy = sy + dir[j][1];a[j] = Map[tempx][tempy]; ///数组a用来保留,(sx,sy)周围点的原始状态,回溯要用到if(tempx<1||tempx>n||tempy<1||tempy>m) continue;if(Map[tempx][tempy]==0)  ///只有是空地才可以封锁Map[tempx][tempy] = 2;}dfs(tx,ty,step+1); ///以(tx,ty)为起点,进行深搜Map[tx][ty] = 0;   ///回溯,变为0,代表该点没有走过for(int j = 0; j < 4; j++){if(i == j) continue; int tempx = sx + dir[j][0];int tempy = sy + dir[j][1];if(tempx<1||tempx>n||tempy<1||tempy>m) continue;Map[tempx][tempy] = a[j];  ///恢复(sx,sy)周围点的原始状态。}}}
}
int main()
{while(~scanf("%d%d",&n,&m)){scanf("%d%d%d",&x,&y,&k);memset(Map,0,sizeof(Map));  ///代表这个位置是'.'flag = false;dfs(1,1,0);}
}

EOJ 3260:袋鼠妈妈找孩子相关推荐

  1. ecnu 3260 袋鼠妈妈找孩子

    袋鼠妈妈找不到她的孩子了.她的孩子被怪兽抓走了.袋鼠妈妈现在在地图的左上角,她的孩子在地图第 x 行第 y 列的位置.怪兽想和袋鼠妈妈玩一个游戏:他不想让袋鼠妈妈过快地找到她的孩子.袋鼠妈妈每秒钟可以 ...

  2. 大学生程序设计邀请赛(华东师范大学)C:袋鼠妈妈找孩子

    袋鼠妈妈找孩子 Time limit per test: 1.5 seconds Time limit all tests: 10.0 seconds Memory limit: 256 megaby ...

  3. BFS——小妈妈找蝌蚪

    BFS--小妈妈找蝌蚪 题目描述 青蛙妈妈最近很不放心把蝌蚪宝宝送到幼儿园,但当她买菜回家时,却发现可爱的孩子小蝌蚪走丢了. 小池塘里有很多石头,青蛙家在其中标号为s的石头上.小蝌蚪会移动k分钟,每分 ...

  4. 浙江工业大学大学生程序设计迎新赛预赛( F,小妈妈找蝌蚪 L ,取数游戏 M,小杰的签到题)

    F,妈妈找小蝌蚪 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 青蛙妈妈最近很不放心把蝌 ...

  5. 安全精简添加,让肌肤喝饱水,袋鼠妈妈打消孕期护肤疑虑

    很多孕妈妈为了胎儿安全着想,对日常的护肤品化妆品也会谨小慎微,生怕自己一点疏忽会影响宝宝,甚至有些孕妈妈会在网上找用各种植物.蔬菜偏方进行护肤美容,而这反而会影响正常的肌肤健康. 其实,护肤品要渗透到 ...

  6. 袋鼠妈妈和植物主义哪个适合孕妇用?主要看这几点

    以前总期待着有一天,自己能暂别工作,去快乐地享受数月产假.直到这一天真正来临,才知道当孕妈有多辛苦. 这个不能吃,那个不能碰,连很多平时用的护肤品.日常用品都得换.于是,咱得每天去研究吃什么,补什么, ...

  7. Python每日一练-----妈妈找小蝌蚪(哈希算法)

    题目: 给定一个池塘里面有众多小蝌蚪(整数数组 nums) 他们已经排队好了,有一位青蛙妈妈(一个整数目标值 mom),请你帮助青蛙妈妈找到他的亲生孩子所在的位置(数组序号)(青蛙:生的时候我也没想过 ...

  8. Python每日一练-----妈妈找小蝌蚪(进阶版),指针的灵活运用

    题目: 给定一个池塘里面有众多小蝌蚪(整数数组 nums) 他们已经排队好了,有一位青蛙妈妈(一个目标值 :0),请你帮助青蛙妈妈找到他的亲生孩子(青蛙:生的时候我也没想过要找啊),假设青蛙妈妈身上带 ...

  9. 简单好听的id_一位妈妈给孩子的10大家规,简单实用,值得所有父母借鉴!

    掘金首页动态话题小册活动搜索掘金搜索写文章登录注册_Hahn_2019年01月08日阅读 566<蜘蛛侠:平行宇宙>的视觉解析与滤镜实现早在四年前,索尼想要制作全新风格的"蜘蛛侠 ...

最新文章

  1. 编程实现灰度处理函数
  2. 分享Silverlight新鲜事(11月15日-21日) - PDC 10 Downloader
  3. 瞧瞧 Fog Creek 软件公司办公环境
  4. 小程序类似抖音视频整屏切换
  5. oom 如何避免 高并发_如何设计这样一个高并发系统?
  6. 计算机四级数据库真题,2015年计算机四级数据库真题
  7. CentOS下安装postgresql
  8. Python文件操作小案例:交替合并两个记事本文件
  9. oracle—新建用户
  10. GIS | 坐标系统与地图投影
  11. visio2013激活教程
  12. DSIS多媒体信息发布系统液晶广告机管理软件
  13. FDD LTE对称吗?
  14. 【转】如何向App Sotre提交应用
  15. Visual studio系统找不到指定文件的解决办法
  16. 解决api打开显示“已取消到该网页的导航”问题或者api里面没有内容
  17. win10怎么把两个盘合成一个,win10怎么把分区合并
  18. Javascript随机生成数字字母字符串
  19. 与i7性能相当的服务器cpu,i7 8550 U相当于七代什么水平?i7 8550 U性能评测分析
  20. 实战篇-OpenSSL之调用EVP框架实现AES多种加密模式

热门文章

  1. 【C++】动态规划之状态转移方程(单串)
  2. 基于OpenCV的人脸识别门禁系统
  3. 立创商城的元器件库导入AD16(导入自己的库)
  4. 滚珠丝杠和梯形丝杠的区别
  5. windows10某些文件删不掉的终极解决办法
  6. mysql使用存储过程操作动态更新
  7. 解决PHP连接Redis报read error on connection错误
  8. android progressdialog 点击不消失,ProgressDialog不消失在Android应用程序
  9. 研发人员最希望项目经理和PMO能够做什么?看完不要惊讶
  10. LittleAlterBoy.dll VST插件