• <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>

            PKU 2251 用DFS TLE了 BFS AC了

                                                                                   Dungeon Master
            Time Limit: 1000MS Memory Limit: 65536K
            Total Submissions: 6561 Accepted: 2610

            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!
            

            三維迷宮問題
            據說要用BFS,范圍30 ,我以為DFS能搞定的,為什么會超時呢????
             1#include<iostream>
             2#include<string.h>
             3using namespace std;
             4char G[35][35][35];
             5bool g[35][35][35];
             6void dfs(int l,int r,int c)
             7{
             8     if(G[l][r][c]==0||G[l][r][c]=='#')return ;
             9     if((G[l+1][r][c]=='.'||G[l+1][r][c]>G[l][r][c])&&G[l+1][r][c]!=0&&G[l+1][r][c]!='#') { G[l+1][r][c]=G[l][r][c]+1;g[l+1][r][c]=1;dfs(l+1,r,c);}
            10     if((G[l][r-1][c]=='.'||G[l][r-1][c]>G[l][r][c])&&G[l][r-1][c]!=0&&G[l][r-1][c]!='#') { G[l][r-1][c]=G[l][r][c]+1;g[l][r-1][c]=1;dfs(l,r-1,c);}  
            11     if((G[l][r+1][c]=='.'||G[l][r+1][c]>G[l][r][c])&&G[l][r+1][c]!=0&&G[l][r+1][c]!='#') { G[l][r+1][c]=G[l][r][c]+1;g[l][r+1][c]=1;dfs(l,r+1,c);}
            12     if((G[l][r][c-1]=='.'||G[l][r][c-1]>G[l][r][c])&&G[l][r][c-1]!=0&&G[l][r][c-1]!='#') { G[l][r][c-1]=G[l][r][c]+1;g[l][r][c-1]=1;dfs(l,r,c-1);}
            13     if((G[l][r][c+1]=='.'||G[l][r][c+1]>G[l][r][c])&&G[l][r][c+1]!=0&&G[l][r][c+1]!='#') { G[l][r][c+1]=G[l][r][c]+1;g[l][r][c+1]=1;dfs(l,r,c+1);}
            14     if((G[l-1][r][c]=='.'||G[l-1][r][c]>G[l][r][c])&&G[l-1][r][c]!=0&&G[l-1][r][c]!='#') { G[l-1][r][c]=G[l][r][c]+1;g[l-1][r][c]=1;dfs(l-1,r,c);}
            15}
            16
            17int main()
            18{    
            19     int i,j,k,l,r,c,sl,sr,sc,el,er,ec;  //起點,終點 
            20     while(cin>>l>>r>>c,l||r||c)
            21     {
            22        memset(G,0,sizeof (G));
            23        memset(g,0,sizeof (g));
            24        for(i=1; i<=l ;i++)
            25        for(j=1; j<=r; j++)
            26        for(k=1; k<=c; k++)
            27        {
            28          cin>>G[i][j][k];
            29          if(G[i][j][k]=='S')
            30          { sl=i; sr=j; sc=j; G[i][j][k]=1; g[i][j][k]=1; }
            31          else if(G[i][j][k]=='E')
            32          {el=i; er=j; ec=k; G[i][j][k]=127; }
            33        }           
            34        
            35        dfs(sl,sr,sc); 
            36      /**//*  for(i=1; i<=l ; i++,cout<<endl)
            37        for(j=1; j<=r; j++,cout<<endl)
            38        for(k=1; k<=c; k++)
            39        cout<<(int)G[i][j][k]<<" ";
            40        for(i=1; i<=l ; i++,cout<<endl)
            41        for(j=1; j<=r; j++,cout<<endl)
            42        for(k=1; k<=c; k++)
            43        cout<<(int)g[i][j][k]<<" ";
            44        */if(g[el][er][ec]==0)cout<<"Trapped!"<<endl;
            45        else cout<<"Escaped in "<<int(G[el][er][ec]-1)<<" minute(s)."<<endl;
            46     }
            47    // system("pause");
            48    return 0;
            49}

            寫個BFS終于過了,只要在平面的迷宮基礎上在垂直方向往上,往下都搜兩次就可以了
             1 #include<iostream>
             2 #include<string.h>
             3 #include<queue>
             4 using namespace std;
             5 char G[35][35][35];
             6 int cnt[35][35][35];
             7 struct type
             8 int l,r,c; };
             9 
            10 int main()
            11 {
            12     int l,c,r,sl,sc,sr,el,ec,er,i,j,k;
            13     void bfs(int sl,int sr,int sc);
            14     while(cin>>l>>r>>c,l||c||r)
            15     {
            16       memset(G,0,sizeof (G));
            17       memset(cnt,0,sizeof (cnt));
            18       for(i=1; i<=l; i++)
            19       for(j=1; j<=r; j++)
            20       for(k=1; k<=c; k++)
            21       {
            22         cin>>G[i][j][k];
            23         if(G[i][j][k]=='S'){sl=i; sr=j; sc=k; }
            24         else if(G[i][j][k]=='E'){el=i; er=j; ec=k; }
            25       }
            26     
            27       bfs(sl,sr,sc);
            28    //  for(i=1; i<=l; i++,cout<<endl)
            29     // for(j=1; j<=r; j++,cout<<endl)
            30      //for(k=1; k<=c; k++)
            31      //cout<<cnt[i][j][k]<<' ';
            32     
            33     if(el==sl&&er==sr&&ec==sc)cout<<"Escaped in "<<0<<" minute(s). "<<endl;
            34     else if(cnt[el][er][ec]>0)cout<<"Escaped in "<<cnt[el][er][ec]<<" minute(s). "<<endl;
            35     else cout<<"Trapped! "<<endl;
            36     }
            37    // system("pause");
            38     return 0;
            39 }
            40 
            41 bool valid(int l,int r,int c)
            42 {
            43   return (G[l][r][c]=='.'||G[l][r][c]=='E');  
            44 }
            45 
            46 void bfs(int sl,int sr, int sc)
            47 {
            48   queue<struct type> q;
            49   struct type tem; tem.l=sl; tem.r=sr; tem.c=sc; 
            50   q.push(tem);
            51   while(q.size())
            52   {
            53     tem=q.front(); q.pop();
            54     int l=tem.l,r=tem.r,c=tem.c;
            55     if(valid(l,r+1,c)&&cnt[l][r+1][c]==0){cnt[l][r+1][c]=cnt[l][r][c]+1;tem.l=l; tem.r=r+1; tem.c=c; q.push(tem); }
            56     if(valid(l,r-1,c)&&cnt[l][r-1][c]==0){cnt[l][r-1][c]=cnt[l][r][c]+1;tem.l=l; tem.r=r-1; tem.c=c; q.push(tem); }
            57     if(valid(l,r,c+1)&&cnt[l][r][c+1]==0){cnt[l][r][c+1]=cnt[l][r][c]+1;tem.l=l; tem.r=r; tem.c=c+1; q.push(tem); }
            58     if(valid(l,r,c-1)&&cnt[l][r][c-1]==0){cnt[l][r][c-1]=cnt[l][r][c]+1;tem.l=l; tem.r=r; tem.c=c-1; q.push(tem); }
            59     if(valid(l-1,r,c)&&cnt[l-1][r][c]==0){cnt[l-1][r][c]=cnt[l][r][c]+1;tem.l=l-1; tem.r=r; tem.c=c; q.push(tem); }
            60     if(valid(l+1,r,c)&&cnt[l+1][r][c]==0){cnt[l+1][r][c]=cnt[l][r][c]+1;tem.l=l+1; tem.r=r; tem.c=c; q.push(tem); }
            61     
            62   }
            63 }

            posted on 2010-05-28 21:50 田兵 閱讀(1001) 評論(0)  編輯 收藏 引用 所屬分類: 算法筆記

            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導航

            統計

            常用鏈接

            留言簿(2)

            隨筆分類(65)

            隨筆檔案(65)

            文章檔案(2)

            ACM

            搜索

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            久久综合伊人77777麻豆| 久久久久久午夜成人影院| 久久免费高清视频| 国产一区二区三区久久| 色综合久久中文色婷婷| 亚洲国产精品嫩草影院久久| 一本色道久久99一综合| 久久精品国产久精国产| 综合久久一区二区三区 | 久久无码AV中文出轨人妻| 麻豆久久| 精品久久久久久久| 人人妻久久人人澡人人爽人人精品| 久久婷婷五月综合97色一本一本| 久久精品成人欧美大片| 久久久久高潮毛片免费全部播放| 国内精品久久久久久麻豆| 综合久久给合久久狠狠狠97色| 久久成人影院精品777| 国产69精品久久久久9999APGF| 青青青青久久精品国产| 国内精品久久久久久久久电影网| 久久国产精品无码网站| 久久综合国产乱子伦精品免费| 合区精品久久久中文字幕一区| 久久99精品国产99久久| 久久精品国产亚洲AV无码娇色| 婷婷久久综合| 久久国产综合精品五月天| 久久国产精品-国产精品| 久久水蜜桃亚洲av无码精品麻豆| 一本大道久久香蕉成人网| 久久99精品久久久久久9蜜桃 | 久久亚洲精品成人av无码网站| 久久精品国产亚洲av瑜伽| 国产美女久久久| AV狠狠色丁香婷婷综合久久| 无码人妻少妇久久中文字幕蜜桃| 久久夜色撩人精品国产| 久久久久综合中文字幕| 久久精品18|