zoukankan      html  css  js  c++  java
  • 【BNUOJ 4358】 左手定则

    描述:

    玩过RPG(尤其是国产RPG)的童鞋都应该对迷宫这种神棍的设定深恶痛绝,尤其是当你转了半小时之后发现回到了原地,这种感觉真是无比的痛苦。。。万一游戏还中途崩溃了那真是连掀桌子、砸键盘、摔鼠标的心都有了…… 
    经过无数次的TRIAL AND ERROR之后,玩家终于下定决心认定迷宫存在的意义就是延长游戏时间,SO,他决定借鉴著名的左手定则(就是在每一个路口,我们都选择最左边的方向,左转的优先级最高,其次为向前,最后为右转,如果实在走进了一个死胡同,那就连续右转两次,回头向后走。稍微研究一下这种走迷宫的方法,我们就发现在这个过程中,事实上我们的左手可以始终放在墙上。)对迷宫进行探索。 
    但是呢,左手定则并不能保证遍历到迷宫中的每一个点。悲剧的是,某项重要的通关道具被放在了这个迷宫中……幸运的是,游戏迷宫的地图可以绘制出来,现在请求你的帮助。对于一个给定的地图,他想知道是不是能够通过左手定则取得这件道具。 

    输入:

    多组数据。 
    对于每组数据,第一行有两个整数N,M代表接下来有n行字符串,每行m个字符,其中0<n<=100,0<m<=100,表示一个n×m的迷宫。 <br="">其中‘#’表示墙,‘S’表示起点,‘T’表示道具,‘.’表示空地。 
    接下来是一个方向(NSWE),表示起始面向的方向。 
    数据保证最外一圈都是墙。 

    输出:

    对于每组数据输出一行。‘YES’表示可以到达,‘NO’表示无法到达。

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 int n,m,sx,sy,v[205][205][4];
     5 int ss[26],d[4][2]={-1,0,0,1,1,0,0,-1}; //x和y是哪个要明白....(因为这个WA很多次
     6 char dir,maze[205][205];
     7 void trans(int &x,int &y,int dirc,int dir_to){
     8     x+=d[(dirc+dir_to+4)%4][0];
     9     y+=d[(dirc+dir_to+4)%4][1];
    10 }
    11 int dfs(int x,int y,int dirc){
    12     if(maze[x][y]=='T') return 1;
    13     for(int i=-1;i<3;i++){
    14         int dx=x,dy=y;
    15         trans(dx,dy,dirc,i);
    16         if(v[dx][dy][(dirc+i+4)%4]) return 0;
    17         if(maze[dx][dy]!='#'&&!v[dx][dy][(dirc+i+4)%4]){
    18             v[dx][dy][(dirc+i+4)%4]=1;
    19             return dfs(dx,dy,(dirc+i+4)%4);
    20         }
    21     }
    22     return 0;
    23 }
    24 int main()
    25 {
    26     ss['N'-'A']=0;
    27     ss['E'-'A']=1; 
    28     ss['S'-'A']=2; 
    29     ss['W'-'A']=3;  
    30     while(cin>>n>>m){
    31         for(int i=0;i<n;i++)
    32             for(int j=0;j<m;j++){
    33                 cin>>maze[i][j];
    34                 if(maze[i][j]=='S') sx=i,sy=j;
    35             } 
    36         cin>>dir;
    37         memset(v,0,sizeof v);
    38         if(dfs(sx,sy,ss[dir-'A'])) printf("YES
    ");
    39         else printf("NO
    ");
    40     }
    41 }
  • 相关阅读:
    吴恩达深度学习第4课第3周编程作业 + PIL + Python3 + Anaconda环境 + Ubuntu + 导入PIL报错的解决
    Ubuntu 14.04 16.04 17.10 + Win10 双系统安装记录 + 分区大小选择办法
    NVIDIA Titan Xp Star Wars Collector's Edition显卡深度学习工作站 + Ubuntu17.10 + Tensorflow-gpu + Anaconda3 + Python 3.6 设置
    request.getParameter() request.getAttribute()
    Gson 数据解析
    级联查询
    mybatis 从入门到精通 读书笔记
    springboot 随笔
    springboot 跨域
    select
  • 原文地址:https://www.cnblogs.com/sulley/p/8097958.html
Copyright © 2011-2022 走看看