zoukankan      html  css  js  c++  java
  • 走迷宫(二):在XX限制条件下,是否走得出

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728

    解题方法:BFS+访问数组vis[][];

    给你起点位置和终点位置,让你判断能不能到达,并且拐弯数不能超过某个值。

    #include<iostream>
    #include<stdio.h>
    #include<algorithm> 
    #include<queue>
    using namespace std;
    
    //int dx[]={0,0,-1,1};  
    //int dy[]={1,-1,0,0};
    int dir[4][2] = { 1, 0, -1, 0, 0, 1, 0, -1 };
    char map[101][101];
    int vis[101][101];
    int m,n;
    int k;
    
    struct point
    {
        int x;
        int y;
        int kk;
    };
    
    void bfs(point s,point u)
    {
        int flag=0;
        point q,p;
        s.kk=-1;          //(新增)-1,不是0
    
        vis[s.x][s.y]=1;    //(新增)访问的标志
    
        queue<point>tp;
        tp.push(s);
    
        while(!tp.empty ())
        {
            q=tp.front();
            tp.pop();
    
            if(q.x==u.x&&q.y==u.y&&q.kk<=k)  //(新增)q.kk<=k
            {
                flag=1;
                break;
            }
    
            int i;
            p.kk=q.kk+1;    //(新增)
            for(i=0;i<4;i++)
            {
                p.x=q.x+dir[i][0];//p.x=q.x+dx[i];
                p.y=q.y+dir[i][1];//p.y=q.y+dy[i];
    
                while(p.x>=0&&p.x<m&&p.y>=0&&p.y<n&&map[p.x][p.y]!='*')  //(新增)搜索完一个方向
                {
                    if(!vis[p.x][p.y])
                    {
                        vis[p.x][p.y]=1;
                        tp.push(p);
                    }
                    p.x+=dir[i][0];//p.x+=dx[i];         //(新增)
                    p.y+=dir[i][1];//p.y+=dy[i];         //(新增)
                }
                
            }
    
    
    
        }
        if(flag)
        {
            cout<<"yes
    ";
        }
        else
        {
            cout<<"no
    ";
        }
    }
    
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            cin>>m>>n;
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                {
                    cin>>map[i][j];
                }
            }
    
            point s,u;
            cin>>k>>s.y>>s.x>>u.y>>u.x;
    
            s.y--;s.x--;u.y--;u.x--;
    
            memset(vis,0,sizeof(vis));     //(新增)初始化访问标志的数组
            bfs(s,u);
        }
    }

    相关链接:http://blog.csdn.net/zhuhuangjian/article/details/8262561

  • 相关阅读:
    nmcli命令使用以及网卡绑定bond
    nginx的proxy_redirect
    Centos7双网卡绑定配置 bonding
    XenServer多网卡绑定
    centos7 openfiles问题
    centos7 部署vnc
    python ssh之paramiko模块使用
    redis问题与解决思路
    搭建Harbor企业级docker仓库
    KVM虚拟化相关
  • 原文地址:https://www.cnblogs.com/Strugglinggirl/p/6113307.html
Copyright © 2011-2022 走看看