• nyoj 1129 Salvation


    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1129

    题目分析:感觉题目说的不是多么的清晰,看了别人的分析觉得,也就是说在一个方向不能拐四次弯;大于四次就要return了;方向可以自己定义,方便使用就好

    AC代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<queue>
     4 #include<cstdio>
     5 #include<cstring>
     6 using namespace std;
     7 int n , m;
     8 char map[110][110];
     9 int ex,ey,sx,sy,flag ;
    10 int dir[4][2] = {1,0,0,-1,-1,0,0,1};
    11 int vis[110][110];
    12 bool judge(int x,int y)
    13 {
    14     if(x<1 || x>n || y<1 || y>m || map[x][y] == '#')
    15         return false;
    16     return true;
    17 }
    18 void  dfs(int D,int x,int y)
    19 {
    20       int xx,yy;
    21 
    22       if(x ==  ex && y == ey)
    23       {
    24           flag =1;
    25          return ;
    26       }
    27         int sd = D-1;
    28         for(int i =0; i<4; i++)
    29         {
    30             D = (sd+i+8)%4;
    31             xx = x + dir[D][0];
    32             yy = y + dir[D][1];
    33              //printf("dd:  %d %d
    ",xx,yy);
    34             if(judge(xx,yy))
    35             {
    36                 if(vis[xx][yy] == 4) return ;
    37                 vis[xx][yy]++;
    38                 dfs(D,xx,yy);
    39                 return ;//这个可不能忘
    40             }
    41         }
    42     return ;
    43 }
    44 int main()
    45 {
    46     char s;
    47     while(scanf("%d %d",&n,&m)!=EOF)
    48     {
    49         memset(vis,0,sizeof(vis));
    50         for(int i = 1; i<=n; i++)
    51             for(int j =1;j<=m; j++)
    52             {
    53                 scanf(" %c",&map[i][j]);
    54                 if(map[i][j] == 'T') sx =i,sy =j;
    55                 if(map[i][j] == 'X') ex =i,ey =j;
    56             }
    57             scanf(" %c",&s);
    58             vis[sx][sy] = 1;
    59             int dr;
    60             if(s == 'S') dr = 0;
    61             else if(s == 'W') dr = 1;
    62             else if(s == 'N') dr = 2;
    63             else dr = 3;
    64              flag = 0;
    65             dfs(dr,sx,sy);
    66             if(flag)
    67              printf("YES
    ");
    68              else printf("NO
    ");
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/lovychen/p/4424557.html
Copyright © 2020-2023  润新知