博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客寒假算法基础集训营5 炫酷镜子(dfs)
阅读量:4706 次
发布时间:2019-06-10

本文共 1728 字,大约阅读时间需要 5 分钟。

炫酷镜子

链接:

题目描述

小希拿到了一个镜子块,镜子块可以视为一个N x M的方格图,里面每个格子仅可能安装`\`或者`/`的镜子,会反射90°光线,也可能没有安装镜子,使用`.`代替。
但她看不清楚里面的镜子构造是怎样的。
你是这块镜子块的主人,所以你想计算这块镜子块(从输入的上方往下射入光线)从左到右每一格射入依次分别会从最下面的哪一格子射出,如果无法射出,输出-1。

输入描述:

第一行输入两个整数N,M。随后的N行,每行M个字符。 1≤N,M≤5001≤N,M≤500

输出描述:

输出M行整数,依次为从第i个格子从上往下射入时从下面的哪里射出,如果光线不会从下面射出,则输出-1。
示例1

输入

3 3......\.\

输出

32-1

说明

第一列遇到镜子两次反弹通过第三列射出。 第二列直接射出。 第三列因为镜子反弹后向右边射出。
1 import java.util.Scanner; 2  3 public class Main {  4     static final int maxn = 510; 5     static int n,m; 6     static int pos=-1,flag=0; 7     static String []  s = new String[maxn]; 8     static char [][] mp = new char[maxn][maxn]; 9     static void dfs(int x,int y,char dir)10     {11         if(flag!=0)return;12         if(x<0||y<0||y>=m)13         {14             flag=1;15             pos=-2;16             return;17         }18         if(x>=n)19         {20             flag=1;21             pos=y;22             return ;23         }24         if(dir=='D')25         {26             for(int i=x;i
=0;i--)39 {40 if(mp[i][y]=='\\')41 dfs(i,y-1,'L');42 else if(mp[i][y]=='/')43 dfs(i,y+1,'R');44 else45 dfs(i-1,y,'U');46 }47 }48 else if(dir=='L')49 {50 for(int j=y;j>=0;j--)51 {52 if(mp[x][j]=='\\')53 dfs(x-1,j,'U');54 else if(mp[x][j]=='/')55 dfs(x+1,j,'D');56 else57 dfs(x,j-1,'L');58 }59 }60 else61 {62 for(int j=y;j
 

 

 

转载于:https://www.cnblogs.com/1013star/p/10372136.html

你可能感兴趣的文章
定义列属性:null,default,PK,auto_increment
查看>>
用户画像展示
查看>>
C#中StreamReader读取中文出现乱码
查看>>
使用BufferedReader的时候出现的问题
查看>>
批处理文件中的路径问题
查看>>
hibernate出现No row with the given identifier exists问题
查看>>
为什么wait()和notify()属于Object类
查看>>
配置NRPE的通讯
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>