zoukankan      html  css  js  c++  java
  • YTU 2901: G-险恶逃生II

    2901: G-险恶逃生II

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 44  解决: 14

    题目描述

        SOS!!!koha is trapped in the dangerous maze.He need your help again.
        The maze is a 2D grid consisting of n rows and m columns. Each cell in the maze may have a stone or may
    be occupied by zero or more monsters. The cell that has a stone Koha(including the monsters) cannot enter. Only one of the cells is designated as the exit cell.
        Kona,including the monsters may move in the maze.In a single move,each of them may perform one of the Following actions:
        1. do nothing
        2. move from the current cell to one of the four adjacent cells.
        3. if Koha is located on the exit cell, he may leave the maze. Only he can perform this move — all Monsters will never leave the maze by using this type of movement.
        After each time Kona makes a single move,each of the monsters simultaneously make a single move ,however the choice of which move to make may be different for each of the monsters.
     
        If koha and x(x>0) monsters are located on the same cell, exactly x monsters will ensue that time(since he will be battling each of those x breeders once).After the battle, all of those x monsters will be killed.
        Now,Koha would like to leave the maze,however the monsters will all know his exact sequence of moves even before he makes his first move.All of them will move in such way that will guarentee a monster battle with Koha,if possible. The monsters that couldn't battle him will do nothing.
     
        All right.Your task is to print the mininum number of monster battles that kona must participates in,note that you are not required to minimize the number of moves kona makes.

    输入

    For each case,the first line consists of two integes: n and m(1<=n,m<=1000),denoting the number of rows and the number of columns in the maze.the next n rows will echo depict a row of the map,where each character represents the content of a single cell:
    'T':A cell occupied by a stone.
    'S':An empty cell,and Kona's starting position.
    'E':An empty cell,and where the exit is located.
    A digit(0-9): A cell represented by a digit x means that the cell is empty and is occupied by x monsters(if x is zero,it means the cell is not occupied by any monsters).
     
    It is guaranteed that it will be possible for Kona to leave the maze.

    输出

    For each case,ouput a single line denoted the mininum possible number of monster battles that koha has to participate in if you pick a strategy that minimize this number.

    样例输入

    5 7
    000E0T3
    T0TT0T0
    010T0T0
    2T0T0T0
    0T0S000
    1 4
    SE23
    

    样例输出

    3
    2
    

    提示

    For the second case,kona and the monsters located in (0,2) will reach

    the exit cell simultaneously ,so he must kill them.


    im0qianqian_站在回忆的河边看着摇晃的渡船终年无声地摆渡,它们就这样安静地画下黄昏画下清晨......可怜

    #include <iostream>
    #include <cstring>
    #define size 1000
    using namespace std;
    char map[1011][1011];
    int res[1011][1011];
    int x1,x2,y1,y2,n,m;
    struct point
    {
        int x,y;
    } r[size*size+11];
    int dis[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
    int main()
    {
        void dfs();
        int i,j;
        int num,max=0;
        while(cin>>m>>n)
        {
            for(i=0; i<=n+1; i++)
                map[0][i]=map[m+1][i]='T';
            for(i=0; i<=m+1; i++)
                map[i][0]=map[i][n+1]='T';
            for(i=1; i<=m; i++)
                for(j=1; j<=n; j++)
                {
                    cin>>map[i][j];
                    if(map[i][j]=='E')
                    {
                        x1=i;
                        y1=j;
                    }
                    if(map[i][j]=='S')
                    {
                        x2=i;
                        y2=j;
                    }
                }
            dfs();
            num=res[x2][y2];
            max=0;
            for(i=1; i<=m; i++)
                for(j=1; j<=n; j++)
                    if(map[i][j]>'0'&&map[i][j]<='9')
                        if(res[i][j]<=num&&res[i][j]!=-1)
                            max+=map[i][j]-'0';
            cout<<max<<endl;
        }
        return 0;
    }
    void dfs()
    {
        int i,tail,head,xx,yy,x11,y11;
        memset(res,-1,sizeof(res));
        res[x1][y1]=0;
        r[0].x=x1;
        r[0].y=y1;
        tail=1;
        head=0;
        while(tail != head)
        {
            x11=r[head].x;
            y11=r[head].y;
            for(i=0; i<4; i++)
            {
                xx=x11+dis[i][0];
                yy=y11+dis[i][1];
                if(map[xx][yy]!='T'&&res[xx][yy]==-1)
                {
                    r[tail].x=xx;
                    r[tail].y=yy;
                    res[xx][yy] = 1 + res[x11][y11];
                    tail++;
                }
            }
            head++;
        }
    
    }
    


  • 相关阅读:
    ACM/ICPC ZOJ1006-Do the Untwist 解题代码
    ACM/ICPC ZOJ1003-Crashing Balloon 解题代码
    数据结构(二)二叉搜索树-非递归实现遍历
    数据结构(一)二叉搜索树-递归实现
    Spark系列(三)SparkContext分析
    Docker系列(九)Kubernetes安装
    Docker系列(八)Kubernetes介绍
    Docker系列(七)Shipyard安装及介绍
    Docker系列(六)路由打通网络示例
    Esper系列(十四)Contained-Event Selection
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989668.html
Copyright © 2011-2022 走看看