• <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 閱讀(221) 評論(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
            • 評論內容較長,點擊標題查看
            • --王私江
            久久r热这里有精品视频| 日批日出水久久亚洲精品tv| 久久午夜伦鲁片免费无码| 潮喷大喷水系列无码久久精品| 97久久精品人人做人人爽| 久久久国产99久久国产一| 69国产成人综合久久精品| 欧美激情精品久久久久久| 欧美牲交A欧牲交aⅴ久久| 人人狠狠综合88综合久久| AV无码久久久久不卡网站下载| 久久精品无码一区二区三区日韩| 久久久久久久波多野结衣高潮 | 久久91精品国产91| 亚洲国产精品久久久久网站| 亚洲av成人无码久久精品| 久久影视综合亚洲| 中文字幕成人精品久久不卡| 久久精品国产精品亚洲毛片| 久久国内免费视频| 久久亚洲欧洲国产综合| 久久99精品国产一区二区三区| 久久精品aⅴ无码中文字字幕不卡| 久久久久久A亚洲欧洲AV冫| 久久国产成人精品麻豆| 久久久久无码精品国产| 久久久久波多野结衣高潮| 亚洲伊人久久成综合人影院 | 少妇久久久久久被弄高潮| 欧美精品一区二区久久| 国产精品久久久久一区二区三区| 91精品国产高清久久久久久io| 日韩人妻无码一区二区三区久久 | 综合久久给合久久狠狠狠97色| 久久精品无码一区二区三区免费| 国产激情久久久久影院老熟女免费 | yy6080久久| 亚洲AV无码久久| 久久水蜜桃亚洲av无码精品麻豆 | 久久久久久久尹人综合网亚洲 | 国产毛片久久久久久国产毛片|