• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            poj2251

            Dungeon Master

            Time Limit: 1000MS Memory Limit: 65536K
            Total Submissions: 10668 Accepted: 4111

            Description

            You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south, east, west, up or down. You cannot move diagonally and the maze is surrounded by solid rock on all sides.

            Is an escape possible? If yes, how long will it take?

            Input

            The input consists of a number of dungeons. Each dungeon description starts with a line containing three integers L, R and C (all limited to 30 in size).
            L is the number of levels making up the dungeon.
            R and C are the number of rows and columns making up the plan of each level.
            Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.

            Output

            Each maze generates one line of output. If it is possible to reach the exit, print a line of the form
            Escaped in x minute(s).

            where x is replaced by the shortest time it takes to escape.
            If it is not possible to escape, print the line
            Trapped!

            Sample Input

            3 4 5
            S....
            .###.
            .##..
            ###.#
            
            #####
            #####
            ##.##
            ##...
            
            #####
            #####
            #.###
            ####E
            
            1 3 3
            S##
            #E#
            ###
            
            0 0 0
            

            Sample Output

            Escaped in 11 minute(s).
            Trapped!
            
            這題不難,廣搜,不知道為什么這個題目在那個指導中出現在dfs中
            代碼也好些,就是floodfill,往六個方向搜,如果已經走過則不走,如果沒走過且能走則走
            這次數組開小了,第一次隊列開了1000,不知道怎么想的
            第二次檢查 改成10000了,然后還是wa
            第三次 改成100000,終于過了
             1#include<stdio.h>
             2#include<string.h>
             3#include<math.h>
             4struct node
             5{
             6    int x,y,z,d;
             7}
            ;
             8int dx[6][3]= {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
             9int l,r,c,sum,ans,head,tail;
            10struct node que[100000],ss,tt;
            11short hash[35][35][35];
            12char map[35][35][35];
            13void bfs()
            14{
            15    int i,j;
            16    struct node now,new1;
            17    ans=0;
            18    head=0;
            19    tail=1;
            20    que[tail]=ss;
            21    memset(hash,0,sizeof(hash));
            22    hash[ss.x][ss.y][ss.z]=1;
            23    while (head<tail)
            24    {
            25        head++;
            26        now=que[head];
            27        /*if (now.x==tt.x&&now.y==tt.y&&now.z==tt.z)
            28        {
            29            ans=now.d;
            30            return;
            31        }*/

            32        for (i=0; i<6 ; i++ )
            33        {
            34            new1.x=now.x+dx[i][0];
            35            new1.y=now.y+dx[i][1];
            36            new1.z=now.z+dx[i][2];
            37            new1.d=now.d+1;
            38            if (new1.x>=0&&new1.x<l&&new1.y>=0&&new1.y<r&&new1.z>=0&&new1.z<c)//未越界
            39                if ((map[new1.x][new1.y][new1.z]!='#')&&(!hash[new1.x][new1.y][new1.z]))//能走且未走過
            40                {
            41                    if (map[new1.x][new1.y][new1.z]=='E')
            42                    {
            43                        ans=new1.d;
            44                        return;
            45                    }

            46                    if (!hash[new1.x][new1.y][new1.z])
            47                    {
            48                        tail++;
            49                        que[tail]=new1;
            50                        hash[new1.x][new1.y][new1.z]=1;
            51                    }

            52                }

            53        }

            54    }

            55}

            56void init()
            57{
            58    int i,j,k;
            59    for (i=0; i<l; i++ )
            60    {
            61        for (j=0; j<r ; j++ )
            62        {
            63            scanf("%s",&map[i][j]);
            64            for (k=0; k<c ; k++ )
            65            {
            66                if (map[i][j][k]=='S')
            67                {
            68                    ss.x=i;
            69                    ss.y=j;
            70                    ss.z=k;
            71                    ss.d=0;
            72                }

            73                if (map[i][j][k]=='E')
            74                {
            75                    tt.x=i;
            76                    tt.y=j;
            77                    tt.z=k;
            78                }

            79            }

            80        }

            81    }

            82}

            83int main()
            84{
            85    while (scanf("%d%d%d",&l,&r,&c)!=EOF&&!(l==0&&r==0&&c==0))
            86    {
            87        init();
            88        bfs();
            89        if (ans==0)
            90        {
            91            printf("Trapped!\n");
            92        }

            93        else
            94            printf("Escaped in %d minute(s).\n",ans);
            95    }

            96    return 0;
            97}

            98

            posted on 2012-02-24 13:13 jh818012 閱讀(220) 評論(0)  編輯 收藏 引用

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            常用鏈接

            留言簿

            文章檔案(85)

            搜索

            最新評論

            • 1.?re: poj1426
            • 我嚓,,輝哥,,居然搜到你的題解了
            • --season
            • 2.?re: poj3083
            • @王私江
              (8+i)&3 相當于是 取余3的意思 因為 3 的 二進制是 000011 和(8+i)
            • --游客
            • 3.?re: poj3414[未登錄]
            • @王私江
              0ms
            • --jh818012
            • 4.?re: poj3414
            • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
            • --王私江
            • 5.?re: poj1426
            • 評論內容較長,點擊標題查看
            • --王私江
            久久久久国产成人精品亚洲午夜| 久久久亚洲欧洲日产国码是AV| 少妇久久久久久被弄高潮| 国产精品久久久久久影院| 久久午夜电影网| 久久婷婷色香五月综合激情| 亚洲精品乱码久久久久久久久久久久 | 人妻精品久久久久中文字幕| 久久久久免费精品国产| 久久国产亚洲精品麻豆| 一级A毛片免费观看久久精品| 蜜臀av性久久久久蜜臀aⅴ麻豆| 国产叼嘿久久精品久久| 亚洲狠狠婷婷综合久久久久| 久久996热精品xxxx| 国产精品国色综合久久| 久久天天婷婷五月俺也去| 一本一道久久精品综合| 亚洲欧洲日产国码无码久久99| 国产999精品久久久久久| 国产亚洲美女精品久久久2020| 久久精品国产亚洲Aⅴ蜜臀色欲| 精品免费久久久久久久| 国产精品美女久久福利网站| 久久青青草原精品国产软件 | 国产一区二区精品久久凹凸| 久久久一本精品99久久精品66| 亚洲国产精品嫩草影院久久| 久久久精品人妻无码专区不卡 | 久久精品国产欧美日韩99热| 国产精品无码久久久久| 99国产精品久久久久久久成人热| 热99RE久久精品这里都是精品免费| 久久久黄片| 久久人人爽人人爽人人片AV麻豆 | 久久99久久99精品免视看动漫| 久久久久国产一级毛片高清板 | 日韩欧美亚洲综合久久影院Ds | 亚洲第一极品精品无码久久| 久久久国产99久久国产一| 国产精品久久久久久久久久影院|