2547 东方辉针城
时间限制: 1 s
空间限制: 32000 KB
题目等级 : 黄金 Gold
题目描述 Description
将于5月26日发售的东方辉针城在东方吧中引起了很多关注…

这个游戏是这样的,需要你操控一名角色,去和其他的杂鱼和boss决战。而对方和你的攻击的手段都是弹幕。在游戏中,你需要躲避他人的弹幕,并发射出自己的弹幕来攻击对方。本题中,为简单起见,只考虑对方发射的弹幕。

假设主角始终处于画面低端,将每秒与主角出现在一排的弹幕进行叠加,总共游戏进行了T秒,可以形成一个(T+1)×WIDTH大小的字符矩阵,“.”表示该点为空,“*”表示该点有至少一颗子弹。

现在告诉你主角的初始位置,求能否不中弹经过这T秒的弹幕,和操作的步骤。(主角不会⑨的)

题目认为抵达最后一行即视为通过,如果有多种不同的选择可以抵达最后一行请优先向左,其次不动,最后向右;题目保证数据合法且初始位置无弹幕。

输入描述 Input Description
输入数据包括T+3行。
第1行为两个正整数T和WIDTH,分表表示游戏进行的时间和屏幕的宽度。
第2行为一个正整数S,为初始的位置。
第3~T+3行每行包括WIDTH个字符,表示该点的状态。

输出描述 Output Description
第1行为一个字符串“Yes”或者“No”。表示能否不中弹通过此区域。
第2行为一个字符串,如果出现中弹则不输出。表示通过T秒的操作,“L”表示向左移动一个格子,“R”表示向右移动一个格子,“N”表示不动。

样例输入 Sample Input
8 5
3
…..
…..
..*
..*
..*
..*
*.*
…..
…..

样例输出 Sample Output
Yes
NRNNNNLL

数据范围及提示 Data Size & Hint
1≤T≤1000, 1≤WIDTH≤100


思路

本题经典搜索,可能有一些人一下看不懂题目意思,那我先说一下题目大意。
给你一个字符矩阵,按照题目的优先级选择路径。

题目给的T为8,但矩阵却有九排,那是因为主角移动是从第二排开始,
一共移动了8排,WIDTH代表一排有几个位置,按照优先级,
主角当下一排的左边位置没有子弹(*)时先向左走,左边不能走时走中间,
最后走右边。如果走不出去,就输出”No”。

方法一

其实这个题目可以用回溯,当一条路走不通时,就返回上一级,走下一条路,
知道全走通或走不通。
代码如下:

#include<cstdio>
#include<iostream>
#define M 1010
using namespace std;
int map[M][M],vis[M][M],a[M],T,n,flag;
void dfs(int t,int pos)
{if(flag==1)return;if(t==T){printf("Yes\n");for(int i=1;i<=T;i++)printf("%c",(char)a[i]);flag=1;return;}if(map[t+1][pos-1]=='.'&&!vis[t+1][pos-1]){a[t+1]='L';vis[t+1][pos-1]=1;dfs(t+1,pos-1);vis[t+1][pos-1]=0;}if(map[t+1][pos]=='.'&&!vis[t+1][pos]){a[t+1]='N';vis[t+1][pos]=1;dfs(t+1,pos);vis[t+1][pos]=0;}if(map[t+1][pos+1]=='.'&&!vis[t+1][pos+1]){a[t+1]='R';vis[t+1][pos+1]=1;dfs(t+1,pos+1);vis[t+1][pos+1]=0;}
}
int main()
{freopen("jh.in","r",stdin);scanf("%d%d",&T,&n);int Qi;char s[M];scanf("%d",&Qi);for(int i=0;i<=T;i++){scanf("%s",s);for(int j=1;j<=n;j++)map[i][j]=(int)s[j-1];}dfs(0,Qi);if(flag==0)printf("No");return 0;
}

方法二

如果你感觉搜索加回溯太长或不符合你的代码风格,
那么这里还有一个简单的代码,没有回溯,但是,思路是一样的。

注意:在dfs函数中,判断是否走通和标志位赋值时,一定要让n>t,
代表走出矩阵,也就是能够走到最后一排,没有弹幕阻挡。

#include<cstdio>
#include"iostream"
using namespace std;
bool f[1050][150];
int a[3]={-1,0,1};
int t,w,l,flag;
char ss[1050];
char lu[3]={'L','N','R'};
void dfs(int n,int last)
{if(n>t) {flag=1;cout<<"Yes"<<endl;}//如果找到一条路,标志位赋值1elsefor(int i=0;i<3;i++)//按照优先级开一个字符数组{if(f[n+1][last+a[i]])//如果能走就走{ss[n]=lu[i];dfs(n+1,last+a[i]);}if(flag) return;//走通了就返回}
}
int main()
{char s;cin>>t>>w>>l;for(int i=1;i<=t+1;i++)//将字符矩阵转化成bool型(个人习惯)for(int j=1;j<=w;j++){cin>>s;if(s=='.')f[i][j]=1;}dfs(1,l);//从移动的第一排开始找起if(flag)for(int i=1;i<=t;i++)cout<<ss[i];elsecout<<"No"<<endl;return 0;
}

Codevs 2547 东方辉针城相关推荐

  1. codevs 2547 东方辉针城(dfs)

    题目描述 Description 将于5月26日发售的东方辉针城在东方吧中引起了很多关注- 这个游戏是这样的,需要你操控一名角色,去和其他的杂鱼和boss决战.而对方和你的攻击的手段都是弹幕.在游戏中 ...

  2. codves 2547 东方辉针城

    codves 2547 东方辉针城 题目描述 Description 将于5月26日发售的东方辉针城在东方吧中引起了很多关注- 这个游戏是这样的,需要你操控一名角色,去和其他的杂鱼和boss决战.而对 ...

  3. 2547 东方辉针城

    2547 东方辉针城  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 将于5月26日发售的东方辉针城在东方吧中引起了很多关 ...

  4. 东方辉针城(深度优先搜索)

    东方辉针城 题目描述: 将于5月26日发售的东方辉针城在东方吧中引起了很多关注- 这个游戏是这样的,需要你操控一名角色,去和其他的杂鱼和boss决战.而对方和你的攻击的手段都是弹幕.在游戏中,你需要躲 ...

  5. 东方神灵庙及东方辉针城E难度混关

    东方神灵庙 特别水 推荐梦机 随便扭扭就能过 东方辉针城 推荐咲A 怂了就炸 如果规划得不错到了六面每符基本都能炸 狼女终符推荐炸 四面和五面道中比较恶心人千万注意不要收点把自己撞死了 四面的符卡怂了 ...

  6. [codevs2547]东方辉针城

    题目← 首先一定会往上层移动 既然给出了答案的优先顺序那把搜索顺序改一下第一个dfs到的就一定是最优解了-- #include<iostream> #include<cstdio&g ...

  7. 对于有关东方的题目的整理。。

    东方赛高 此为总贴 收录以东方project为背景的题目. 模拟赛套题...(25道)无数据,有题面:二次联通门 1. luogu P3345 [ZJOI2015]幻想乡战略游戏 动态点分治(暴力水过 ...

  8. (差分)洛谷P4231 三步必杀

    洛谷P4231 三步必杀 三步必杀 题目背景 (三)旧都 离开狭窄的洞穴,眼前豁然开朗. 天空飘着不寻常的雪花. 一反之前的幽闭,现在面对的,是繁华的街市,可以听见酒碗碰撞的声音. 这是由被人们厌恶的 ...

  9. 洛谷P3352 [ZJOI2016]线段树

    P3352 [ZJOI2016]线段树 (^ w ^) 题目描述 小Yuuka遇到了一个题目:有一个序列a_1,a_2,?,a_n,q次操作,每次把一个区间内的数改成区间内的最大值,问最后每个数是多少 ...

最新文章

  1. 【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集
  2. 图像Stride求取
  3. Maven 概要介绍
  4. 无约束优化算法——牛顿法与拟牛顿法(DFP,BFGS,LBFGS)
  5. linux用冒泡排序程序,利用双向走动法改进冒泡排序算法C语言源代码[黑盟核心成员]...
  6. 计算机常用的矢量图形文件,学位计算机考试2
  7. 停车场管理系统代码_jsp19109商场商铺停车场服务系统-SSM-Mysql
  8. 三星智能家居系统频繁故障 大批用户受到影响
  9. vue伸缩效果_Vue.js - 元素展开、收起动画效果组件(附:二级菜单的展开、收缩动画效果)...
  10. Netty工作笔记0068---Protobuf机制简述
  11. ubuntu 用户管理 adduser vs useradd
  12. www.12306.cn是安抚群众心灵的吧?
  13. CodeIgniter学习笔记(六)——CI超级对象中的input输入类
  14. 【踩坑记录】.bss段;.bss段到底占不占目标文件的空间,有没有记录对应信息。
  15. XSS盗取用户信息实验(详细)及xss之旅闯关
  16. 今天终于知道了!阿里巴巴 P8、P9 及以上到底是什么水平?
  17. 445、Java框架99 -【MyBatis - 多对多】 2020.12.23
  18. 表空间信息查询(sql语句)
  19. 大家都在做直播,陌陌做的这个有什么不同?
  20. Android的MvVM模式探讨: Databinding 与 ViewModel+LiveData+Repository对比

热门文章

  1. SpringBoot学习第三天
  2. 智工教育:监理工程师考增项可以免考公共科?
  3. teablue数据分析_盘点数据差异分析
  4. STUN TURN signaling介绍
  5. unity 血条功能
  6. Proteus原理仿真之霓虹灯实验
  7. Excel数据分析从入门到精通(十五)数据透视表基础
  8. 重启Windows VPS服务器的常规和非常规方法
  9. 桌面多了一个IE图标删不掉
  10. 桌面上出现ie图标删不掉