• Salvation -- ---广搜 + 限定方向 ,


    这个欣求 , 在迷宫里密室了方向 , 走过了一个地方 不做标记 还一个劲 , 找不到媳妇不亏 .

    这个题 我跳了两个坑 ,  1 : 习惯性添加标记走过的 位置  ,导致所有的位置都能 走过一遍 ,  2 : 转弯的时候  变换面部朝向

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<set>
    #include<stack>
    #include<string>
    #include<sstream>
    #include<map>
    #include<cctype>
    using namespace std;
    char a[105][105],T;
    int b[4][2]={-1,0,0,-1,1,0,0,1},n,m,t,time1[105][105],mark/*,visited[105][105]*/;    //按照  左上右下的顺序
    void DFS(int x,int y,int q)
    {
        for(int i=0;i<4&&time1[y][x]<4&&!mark;i++)   //同一个点最多前后左右四次
        {
            time1[y][x]++;
            int ac=(i+q)%4;
            if(!mark&&x+b[ac][0]>=0&&y+b[ac][1]>=0&&y+b[ac][1]<n&&x+b[ac][0]<m&&a[y+b[ac][1]][x+b[ac][0]]!='#'/*&&!visited[y+b[ac][1]][x+b[ac][0]]*/)
            {
             //   visited[y+b[ac][1]][x+b[ac][0]]=1;
                if(a[y+b[ac][1]][x+b[ac][0]]=='X')
                {
                    mark=1;
                    break;
                }
                a[y+b[ac][1]][x+b[ac][0]]='@';
                DFS(x+b[ac][0],y+b[ac][1],q);       
                return ;                            //  因为会 迷失方向  所以 一条路走到底 之后 没路走了 ( 进了死胡同 )
             //   visited[y+b[ac][1]][x+b[ac][0]]=0;  // 就    直接去死吧 .
            }
        }
    }
    int main()
    {
        int x,y;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m;j++)
                {
                    scanf(" %c",&a[i][j]);
                    if(a[i][j]=='T')
                    {
                        x=j;
                        y=i;
                    }
                }
            }
            scanf(" %c",&T);
            switch(T)
            {
                case'N':t=0;break;  //  面朝北的话  向左走
                case'S':t=2;break;
                case'W':t=3;break;
                case'E':t=1;break;
            }
            memset(time1,0,sizeof(time1));
           // memset(visited,0,sizeof(visited));
            mark=0;
            DFS(x,y,t);
            if(mark)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    解决js newDate()苹果手机日期格式显示NaN
    AD 用户个人信息补充
    CSV 文件批量导入 数据库 Pandas
    【笔记】单调栈?
    【其他】Modern C++ in OI
    【笔记】网络流
    【笔记】默认构造函数和零初始化
    【笔记】正确的当前弧优化
    golang读取文件的方法
    protobuf使用
  • 原文地址:https://www.cnblogs.com/A-FM/p/5367584.html
Copyright © 2020-2023  润新知