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

            AOJ 1005 Hero In Maze BFS

            Hero In Maze

            Time Limit:JAVA/Others2000/1000MS  Memory Limit:JAVA/Others131072/65536KB
            Total Submit:240 Accepted:51

            Description

            500年前,Jesse是我國(guó)最卓越的劍客。他英俊瀟灑,而且機(jī)智過(guò)人^_^。

            突然有一天,Jesse心愛(ài)的公主被魔王困在了一個(gè)巨大的迷宮中。Jesse聽(tīng)說(shuō)這個(gè)消息已經(jīng)是兩天以后了,他知道公主在迷宮中還能堅(jiān)持T天,他急忙趕到迷宮,開(kāi)始到處尋找公主的下落。
            時(shí)間一點(diǎn)一點(diǎn)的過(guò)去,Jesse還是無(wú)法找到公主。最后當(dāng)他找到公主的時(shí)候,美麗的公主已經(jīng)死了。從此Jesse郁郁寡歡,茶飯不思,一年后追隨公主而去了。T_T
            500年后的今天,Jesse托夢(mèng)給你,希望你幫他判斷一下當(dāng)年他是否有機(jī)會(huì)在給定的時(shí)間內(nèi)找到公主。

            他會(huì)為你提供迷宮的地圖以及所剩的時(shí)間T。請(qǐng)你判斷他是否能救出心愛(ài)的公主。

            Input

            題目包括多組測(cè)試數(shù)據(jù)。
            每組測(cè)試數(shù)據(jù)以三個(gè)整數(shù)N,M,T(00)開(kāi)頭,分別代表迷宮的長(zhǎng)和高,以及公主能堅(jiān)持的天數(shù)。
            緊接著有M行,N列字符,由".","*","P","S"組成。其中
            "." 代表能夠行走的空地。
            "*" 代表墻壁,Jesse不能從此通過(guò)。
            "P" 是公主所在的位置。
            "S" 是Jesse的起始位置。
            每個(gè)時(shí)間段里Jesse只能選擇“上、下、左、右”任意一方向走一步。
            輸入以0 0 0結(jié)束。

            Output

            如果能在規(guī)定時(shí)間內(nèi)救出公主輸出“YES”,否則輸出“NO”。

            Sample Input

            4 4 10
            ....
            ....
            ....
            S**P
            0 0 0

            Sample Output

            YES

            寫(xiě)的第一個(gè)BFS,激動(dòng)!!
            代碼如下,高手飄過(guò),你們根本不需要看,太初級(jí)了。
            這個(gè)代碼主要兩個(gè)地方花了很多時(shí)間:
            1,隊(duì)列本應(yīng)從隊(duì)頭取元素的,我從尾部取了,后來(lái)用queue的front和push可以很方便的實(shí)現(xiàn)。
            2.,是沒(méi)有考慮公主被包圍的情況,即公主周圍全是‘*’,那么王子就沒(méi)辦法達(dá)到,這樣dist[x2][y2](x2,y2是公主的位置)一直是0,肯定小于t;
             1#include<iostream>
             2#include<queue>
             3using namespace std;
             4char a[105][105];
             5bool f[105][105];
             6int dist[105][105];
             7struct point 
             8int x,y; };
             9
            10bool valid(int x,int y)
            11return !f[x][y]&&a[x][y]!='*'&&a[x][y]; }
            12
            13void bfs(int i,int j)
            14{
            15     dist[i][j]=0; f[i][j]=1;
            16     struct point tem;
            17     tem.x=i; tem.y=j;
            18     queue<struct point>q;
            19     q.push(tem);
            20      while(q.size())
            21      {
            22         tem=q.front();q.pop(); 
            23         int x=tem.x,y=tem.y;
            24         if(valid(x-1,y)){f[x-1][y]=1;  dist[x-1][y]=dist[x][y]+1;tem.x=x-1; tem.y=y; q.push(tem);}
            25         if(valid(x,y-1)){f[x][y-1]=1;  dist[x][y-1]=dist[x][y]+1;tem.x=x; tem.y=y-1; q.push(tem);}
            26         if(valid(x+1,y)){f[x+1][y]=1;  dist[x+1][y]=dist[x][y]+1;tem.x=x+1; tem.y=y; q.push(tem);}
            27         if(valid(x,y+1)){f[x][y+1]=1;  dist[x][y+1]=dist[x][y]+1;tem.x=x; tem.y=y+1; q.push(tem);}
            28      }

            29    
            30}

            31
            32int main()
            33{
            34    int n,m,t,i,j,u;
            35    int x,y,x2,y2;
            36    while(cin>>m>>n>>t,n||m||t)
            37    {
            38      memset(a,0,sizeof a);
            39      memset(f,0,sizeof f);
            40      memset(dist,0,sizeof dist);
            41      x=y=x2=y2=1;
            42      for(i=1; i<=n; i++)
            43      for(j=1; j<=m;j++)
            44       {
            45                cin>>a[i][j];
            46                if(a[i][j]=='S'){x=i; y=j;}
            47                else if(a[i][j]=='P'){x2=i; y2=j; }
            48       }

            49    
            50       bfs(x,y);
            51   
            52      if(x==x2&&y==y2)cout<<"YES"<<endl;
            53      else if(dist[x2][y2]==0)cout<<"NO"<<endl;
            54      else if(dist[x2][y2]<=t)cout<<"YES"<<endl;
            55      else cout<<"NO"<<endl;
            56    }

            57 
            58   return 0;   
            59}

            posted on 2010-05-20 21:58 田兵 閱讀(1704) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 算法筆記

            評(píng)論

            # re: AOJ 1005 Hero In Maze BFS[未登錄](méi) 2010-05-21 22:54 meta

            AOJ是哪里的Online Judge啊,沒(méi)有找到啊~  回復(fù)  更多評(píng)論   

            # re: AOJ 1005 Hero In Maze BFS 2010-05-22 18:11 田兵

            http://icpc.ahu.edu.cn:81/AOJ/
            學(xué)校的OJ,不出名,都是給自己做的,  回復(fù)  更多評(píng)論   

            <2010年6月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(2)

            隨筆分類(65)

            隨筆檔案(65)

            文章檔案(2)

            ACM

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            久久精品www人人爽人人| 久久久精品波多野结衣| 久久99国产综合精品| 国产精品欧美久久久天天影视| 久久国产高潮流白浆免费观看| 久久国产精品-国产精品| 久久亚洲av无码精品浪潮| 久久国产免费直播| 中文字幕成人精品久久不卡| 亚洲第一永久AV网站久久精品男人的天堂AV | 日韩AV毛片精品久久久| 麻豆成人久久精品二区三区免费| 亚洲一本综合久久| 嫩草伊人久久精品少妇AV| 久久亚洲精品无码播放| 狠狠狠色丁香婷婷综合久久俺| 综合久久给合久久狠狠狠97色| 久久se精品一区二区| 国产成人精品久久| 久久综合九色综合欧美就去吻| 国产精品国色综合久久| 亚洲精品蜜桃久久久久久| 伊人久久大香线蕉AV一区二区| 国产精品综合久久第一页| 97r久久精品国产99国产精| 人妻久久久一区二区三区| 国产精品久久久久久久久久影院| 九九久久精品无码专区| 伊人久久大香线焦综合四虎| 99国产精品久久| 精品国产一区二区三区久久| 久久影院综合精品| 亚洲乱码中文字幕久久孕妇黑人| 久久99久久无码毛片一区二区| 久久综合综合久久97色| 青草影院天堂男人久久| 曰曰摸天天摸人人看久久久| 国产高潮国产高潮久久久91| 国产成人久久久精品二区三区| 国产精自产拍久久久久久蜜| 久久天天躁狠狠躁夜夜2020|