• HDU2216:Game III(BFS)


    Game III

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
    Total Submission(s) : 31   Accepted Submission(s) : 11

    Font: Times New Roman | Verdana | Georgia

    Font Size: ← →

    Problem Description

    Zjt and Sara will take part in a game, named Game III. Zjt and Sara will be in a maze, and Zjt must find Sara. There are some strang rules in this maze. If Zjt move a step, Sara will move a step in opposite direction.
    Now give you the map , you shold find out the minimum steps, Zjt have to move. We say Zjt meet Sara, if they are in the same position or they are adjacent . 
    Zjt can only move to a empty position int four diraction (up, left, right, down). At the same time, Sara will move to a position in opposite direction, if there is empty. Otherwise , she will not move to any position.
    The map is a N*M two-dimensional array. The position Zjt stays now is marked Z, and the position, where Sara stays, is marked E.

    >  . : empty position
    >  X: the wall
    >  Z: the position Zjt now stay
    >  S: the position Sara now stay

    Your task is to find out the minimum steps they meet each other.

    Input

    The input contains several test cases. Each test case starts with a line contains three number N ,M (2<= N <= 20, 2 <= M <= 20 ) indicate the size of the map. Then N lines follows, each line contains M character. A Z and a S will be in the map as the discription above.

    Output

    For each test case, you should print the minimum steps. “Bad Luck!” will be print, if they can't meet each other.

    Sample Input

    4 4
    XXXX
    .Z..
    .XS.
    XXXX
    4 4
    XXXX
    .Z..
    .X.S
    XXXX
    4 4
    XXXX
    .ZX.
    .XS.
    XXXX

    Sample Output

    1
    1
    Bad Luck!
    #include <iostream>
    #include <cstdio>
    #include<cmath>
    #include<queue>
    #include<cstring>
    using namespace std;
    struct node
    {
        int x,y,u,v,ti;
        node(int a,int b,int c,int d,int e){x=a;y=b;u=c;v=d;ti=e;}
    };
    int n,m,i,j,sx,sy,tx,ty,ans;
    char mp[25][25];
    int vis[25][25][25][25];  //标记走过否
    int dr[4][2]={{0,1},{0,-1},{-1,0},{1,0} };
    
    bool check(int x,int y)
    {
        if (x>=0 && x<n && y>=0 && y<m && mp[x][y]!='X') return 1;
          return 0;
    }
    void bfs()
    {
        queue<node>Q;
        vis[sx][sy][tx][ty]=1;
        Q.push(node(sx,sy,tx,ty,0));
        while(!Q.empty())
        {
            node p=Q.front();
            Q.pop();
            if (abs(p.x-p.u)+abs(p.y-p.v)<=1) { ans=p.ti; return; }
            for(i=0;i<4;i++)
            {
                int xx=p.x+dr[i][0];
                int yy=p.y+dr[i][1];
                int uu=p.u-dr[i][0];
                int vv=p.v-dr[i][1];
                if (check(xx,yy))
                {
                    if (!check(uu,vv))
                    {
                        uu=p.u;
                        vv=p.v;
                    }
                  if (!vis[xx][yy][uu][vv])
                  {
                      vis[xx][yy][uu][vv]=1;
                      Q.push(node(xx,yy,uu,vv,p.ti+1));
                  }
                }
            }
        }
        return;
    }
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            for(i=0;i<n;i++)
            {
                scanf("%s",&mp[i]);
                for(j=0;j<m;j++)
                {
                    if (mp[i][j]=='Z') sx=i,sy=j;
                    if (mp[i][j]=='S') tx=i,ty=j;
                }
            }
            ans=-1;
            memset(vis,0,sizeof(vis));
            bfs();
            if (ans==-1) printf("Bad Luck!\n");
               else printf("%d\n",ans);
        }
        return 0;
    }
  • 相关阅读:
    BZOJ 1266: [AHOI2006]上学路线route
    重磅!阿里云Promtheus 正式免费公测
    解锁云原生 AI 技能|在 Kubernetes 上构建机器学习系统
    更新与发展 | Alibaba Cloud Linux 2 特性与开发细节揭秘
    《2019上半年DDoS攻击态势报告》发布:应用层攻击形势依然严峻,海量移动设备成新一代肉鸡
    《2019年上半年Web应用安全报告》发布:90%以上攻击流量来源于扫描器,IP身份不再可信
    并发模式与 RPS 模式之争,性能压测领域的星球大战
    互联网商城的上云改造之旅
    技术人具备“结构化思维”意味着什么?
    弘康人寿基于 RocketMQ 构建微服务边界总线的实践
  • 原文地址:https://www.cnblogs.com/stepping/p/5669304.html
Copyright © 2020-2023  润新知