zoukankan      html  css  js  c++  java
  • H

    小明做了一个很久很久的梦,醒来后他竟发现自己和朋友在一个摇摇欲坠的大棋盘上,他们必须得想尽一切办法逃离这里。
    经过长时间的打探,小明发现,自己所在的棋盘格子上有个机关,上面写着“你只有一次机会,出发后t秒大门会为你敞开”,而他自己所在的棋盘是大小为 N*M 的长方形,他可以向上下左右四个方向移动(不可走有障碍点)。棋盘中有一扇门。根据机关的提示,小明顿时明白了,他和朋友必须在第 t 秒到门口。而这一切,没有回头路!因为一旦他移动了,他刚才所在的点就会消失,并且他不能在一个点上停留超过一秒,不然格子会爆炸。大逃亡开始了,请问小明和朋友能安全的逃出这奇怪的棋盘吗?

    Input

    输入多组测试数据。每个测试用例的第一行包含三个整数 N、M 和 T ( 1 < N , M < 7 ; 0 < T < 50 ),分别表示棋盘的大小和门打开的时间。接下来的N行给出棋盘布局,每一行包含M个字符。其中
    ".": 无障碍点
    "X": 障碍点
    "S": 起点
    "D": 门

    输入以 3 个 0 结束。这个测试用例不需要处理。
    输入数据中的空格有些问题,请不要使用getchar(),如果一定要用可以选择scanf("%s",) 自动忽略空格

    Output

    对于每组样例输出一行。
    如果小明能够安全逃出,输出 "YES" ,否则输出 "NO"。

    Sample Input

    4 4 5
    S.X.
    ..X.
    ..XD
    ....
    3 4 5
    S.X.
    ..X.
    ...D
    0 0 0

    Sample Output

    NO
    YES
    题目大意就是判断能否在规定的时间恰好走到终点,简单DFS 看其他大佬的博文时,他们都用到了什么奇偶减枝,,我也不会。。。这题目完全水过去的。

    #include<iostream>
    #include<math.h>
    #include<cstring>
    using namespace std;
    char arr[100][100];
    int mark[100][100];
    int n,m,t,end_i,end_j,start_i,start_j;
    int d[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
    int flag=0;
    void dfs(int x,int y,int step){
    if(flag==1)
    return ;
    if(step>t)
    return ;
    if(arr[x][y]=='D'){
    if(t==step)
    flag=1;
    return ;
    }
    for(int i=0;i<4;i++){
    int dx= x+d[i][0];
    int dy= y+d[i][1];
    if(dx>=0&&dy>=0&&dx<n&&dy<m&&arr[dx][dy]!='X'&&mark[dx][dy]==0)
    {
    mark[dx][dy]=1;
    dfs(dx,dy,step+1);
    mark[dx][dy]=0;
    }
    }
    }

    int main()
    {
    while(cin>>n>>m>>t){
    flag=0;
    memset(mark,0,sizeof(mark));
    if(n==0&&m==0&&t==0)
    break;
    for(int i=0;i<n;i++)
    scanf("%s",&arr[i]);
    for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
    if(arr[i][j]=='S')
    {
    mark[i][j]=1;
    dfs(i,j,0);

    }
    }
    }
    if(flag==1){
    cout<<"YES"<<endl;
    }
    else cout<<"NO"<<endl;
    }
    return 0;
    }

  • 相关阅读:
    [Nowcoder]2020牛客寒假算法基础集训营3
    [Nowcoder]2020牛客寒假算法基础集训营2
    [Nowcoder]2020牛客寒假算法基础集训营1
    [备份]算法模板大集锦
    [东西]neverOpen
    [随笔]ICPC2.0
    [知识点]C++中STL容器之set
    [知识点]数列分块入门1-9
    [知识点]C++中STL容器之vector
    [知识点] 1.3.1 STL简介
  • 原文地址:https://www.cnblogs.com/Accepting/p/11242021.html
Copyright © 2011-2022 走看看