EOJ 3260:袋鼠妈妈找孩子
袋鼠妈妈找孩子
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
2 6 1 3 4
.*.*** ......
比赛的时候出题人发布了公告,说这个题目是多组答案,只要给出任意一个符合条件的答案,都会判为正确。
官方题解:
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:袋鼠妈妈找孩子相关推荐
- ecnu 3260 袋鼠妈妈找孩子
袋鼠妈妈找不到她的孩子了.她的孩子被怪兽抓走了.袋鼠妈妈现在在地图的左上角,她的孩子在地图第 x 行第 y 列的位置.怪兽想和袋鼠妈妈玩一个游戏:他不想让袋鼠妈妈过快地找到她的孩子.袋鼠妈妈每秒钟可以 ...
- 大学生程序设计邀请赛(华东师范大学)C:袋鼠妈妈找孩子
袋鼠妈妈找孩子 Time limit per test: 1.5 seconds Time limit all tests: 10.0 seconds Memory limit: 256 megaby ...
- BFS——小妈妈找蝌蚪
BFS--小妈妈找蝌蚪 题目描述 青蛙妈妈最近很不放心把蝌蚪宝宝送到幼儿园,但当她买菜回家时,却发现可爱的孩子小蝌蚪走丢了. 小池塘里有很多石头,青蛙家在其中标号为s的石头上.小蝌蚪会移动k分钟,每分 ...
- 浙江工业大学大学生程序设计迎新赛预赛( F,小妈妈找蝌蚪 L ,取数游戏 M,小杰的签到题)
F,妈妈找小蝌蚪 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 青蛙妈妈最近很不放心把蝌 ...
- 安全精简添加,让肌肤喝饱水,袋鼠妈妈打消孕期护肤疑虑
很多孕妈妈为了胎儿安全着想,对日常的护肤品化妆品也会谨小慎微,生怕自己一点疏忽会影响宝宝,甚至有些孕妈妈会在网上找用各种植物.蔬菜偏方进行护肤美容,而这反而会影响正常的肌肤健康. 其实,护肤品要渗透到 ...
- 袋鼠妈妈和植物主义哪个适合孕妇用?主要看这几点
以前总期待着有一天,自己能暂别工作,去快乐地享受数月产假.直到这一天真正来临,才知道当孕妈有多辛苦. 这个不能吃,那个不能碰,连很多平时用的护肤品.日常用品都得换.于是,咱得每天去研究吃什么,补什么, ...
- Python每日一练-----妈妈找小蝌蚪(哈希算法)
题目: 给定一个池塘里面有众多小蝌蚪(整数数组 nums) 他们已经排队好了,有一位青蛙妈妈(一个整数目标值 mom),请你帮助青蛙妈妈找到他的亲生孩子所在的位置(数组序号)(青蛙:生的时候我也没想过 ...
- Python每日一练-----妈妈找小蝌蚪(进阶版),指针的灵活运用
题目: 给定一个池塘里面有众多小蝌蚪(整数数组 nums) 他们已经排队好了,有一位青蛙妈妈(一个目标值 :0),请你帮助青蛙妈妈找到他的亲生孩子(青蛙:生的时候我也没想过要找啊),假设青蛙妈妈身上带 ...
- 简单好听的id_一位妈妈给孩子的10大家规,简单实用,值得所有父母借鉴!
掘金首页动态话题小册活动搜索掘金搜索写文章登录注册_Hahn_2019年01月08日阅读 566<蜘蛛侠:平行宇宙>的视觉解析与滤镜实现早在四年前,索尼想要制作全新风格的"蜘蛛侠 ...
最新文章
- 编程实现灰度处理函数
- 分享Silverlight新鲜事(11月15日-21日) - PDC 10 Downloader
- 瞧瞧 Fog Creek 软件公司办公环境
- 小程序类似抖音视频整屏切换
- oom 如何避免 高并发_如何设计这样一个高并发系统?
- 计算机四级数据库真题,2015年计算机四级数据库真题
- CentOS下安装postgresql
- Python文件操作小案例:交替合并两个记事本文件
- oracle—新建用户
- GIS | 坐标系统与地图投影
- visio2013激活教程
- DSIS多媒体信息发布系统液晶广告机管理软件
- FDD LTE对称吗?
- 【转】如何向App Sotre提交应用
- Visual studio系统找不到指定文件的解决办法
- 解决api打开显示“已取消到该网页的导航”问题或者api里面没有内容
- win10怎么把两个盘合成一个,win10怎么把分区合并
- Javascript随机生成数字字母字符串
- 与i7性能相当的服务器cpu,i7 8550 U相当于七代什么水平?i7 8550 U性能评测分析
- 实战篇-OpenSSL之调用EVP框架实现AES多种加密模式
热门文章
- 【C++】动态规划之状态转移方程(单串)
- 基于OpenCV的人脸识别门禁系统
- 立创商城的元器件库导入AD16(导入自己的库)
- 滚珠丝杠和梯形丝杠的区别
- windows10某些文件删不掉的终极解决办法
- mysql使用存储过程操作动态更新
- 解决PHP连接Redis报read error on connection错误
- android progressdialog 点击不消失,ProgressDialog不消失在Android应用程序
- 研发人员最希望项目经理和PMO能够做什么?看完不要惊讶
- LittleAlterBoy.dll VST插件