• <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>
            心如止水
            Je n'ai pas le temps
            posts - 400,comments - 130,trackbacks - 0

            在一個(gè)夜黑風(fēng)高,伸手不見(jiàn)五指的深夜,睡夢(mèng)中的林月如突然聽(tīng)到房外一陣躁動(dòng)。她出去一看,發(fā)現(xiàn)一個(gè)女飛賊搶了一個(gè)古董商的包袱。
            "站?。?
            "那你為什么不來(lái)追我?"
            "因?yàn)槌绦蛟O(shè)計(jì),在李大哥來(lái)之前,我不能追你。"
            "那李逍遙為什么不來(lái)呢?"
            "大概程序出bug了吧"
            ………………………………………………
            終于,在等了一個(gè)又一個(gè)時(shí)辰后,林月如終于忍不住了,開(kāi)始向女飛賊發(fā)起進(jìn)攻。
            "喂!你為什么可以動(dòng)???"
            "這大概也是一個(gè)bug吧!"
            "不公平??!"
            "廢話少說(shuō)。"

            已知林月如和女飛賊站在一個(gè)矩陣中,矩陣中有某些障礙物不可穿越。月如使出的銅錢(qián)鏢可攻擊8個(gè)方向,但不可穿越障礙物(可視為不能穿墻的重狙)。每個(gè)單位時(shí)間,月如可向上下左右4個(gè)方向移動(dòng)一格,攻擊不浪費(fèi)時(shí)間。當(dāng)然,月如想盡快結(jié)束這場(chǎng)無(wú)聊的戰(zhàn)斗,所以她想在最短的時(shí)間內(nèi)消滅女飛賊。

            第一行為2個(gè)數(shù)N,M表示矩陣的規(guī)模(N為高,M為寬)。
            接下來(lái)是N*M的矩陣,O表示空地,X表示障礙物。
            下面是若干行數(shù)據(jù),每行為一對(duì)數(shù)據(jù),分別是女飛賊的位置和林月如的位置,顯然她們都不可能在障礙物上。

            每一組數(shù)據(jù)輸出一行,僅一個(gè)整數(shù),表示能消滅掉女飛賊的最短時(shí)間。
            顯然若能直接打到女飛賊,則時(shí)間為0。
            若無(wú)法消滅,則輸出"Impossible!"。(不含引號(hào))

            對(duì)于30%的數(shù)據(jù),有N*M<=100
            對(duì)于50%的數(shù)據(jù),有N*M<=400
            對(duì)于100%的數(shù)據(jù),有N*M<=20000
            對(duì)于100%的數(shù)據(jù),測(cè)試數(shù)據(jù)組數(shù)不超過(guò)20組

            本來(lái)可以一次AC的題目,一些比較具有相似性的句子在復(fù)制的時(shí)候忘了修改了,把'+'寫(xiě)成了'-',第一次提交只得了30分,百思不得其解……

            我的思路是廣搜出月如所在的點(diǎn)可以到達(dá)的其他點(diǎn)需要多少時(shí)間可以到達(dá),然后把女飛飛所在的點(diǎn)向八個(gè)方向擴(kuò)展,ans=maxint,ans=min(ans,s[i][j])。m*n<=20000,二維數(shù)組[20000][20000]肯定會(huì)爆,應(yīng)該用一維數(shù)組表示,但是數(shù)據(jù)很弱,用[200][200]可以AC。

            以下是我的代碼:

            #include<stdio.h>
            #define min(a,b) (a<b?a:b)
            #define maxint 200000000
            /*
            0 可到達(dá)的點(diǎn) 
            -1 障礙物 
            maxint 不可到達(dá)的點(diǎn) 
            */

            struct queue
            {
                
            long xi[20001],yi[20001],front,rear,count;
            }
            q;
            int empty()
            {
                
            return (q.count==0);
            }

            void clear()
            {
                q.front
            =0;
                q.rear
            =-1;
                q.count
            =0;
            }

            void put(long x,long y)
            {
                q.count
            ++;
                q.rear
            ++;
                q.xi[q.rear]
            =x;
                q.yi[q.rear]
            =y;
            }

            void get(long *x,long *y)
            {
                q.count
            --;
                
            *x=q.xi[q.front];
                
            *y=q.yi[q.front];
                q.front
            ++;
            }

            int main()
            {
                
            char tmp,ch,map[201][201];
                
            long m,n,x1,y1,x2,y2,i,j,xx,yy,s[201][201]={0};
                
            long xd[]={0/**/,-1,-1,0,1,1,1,0,-1};
                
            long yd[]={0/**/,0,1,1,1,0,-1,-1,-1};

                scanf(
            "%ld%ld\n",&m,&n);
                
            for(i=1;i<=m;i++)
                
            {
                  
            for(j=1;j<=n;j++)
                     scanf(
            "%c",&map[i][j]);
                  scanf(
            "%c",&tmp);
                }

                scanf(
            "%ld %ld %ld %ld",&x1,&y1,&x2,&y2);
                
            //------Read In
                while(x1!=0||x2!=0||y1!=0||y2!=0)
                
            {
                   
            //------BFS
                   long ans=maxint;
                   clear();
                   
            for(i=1;i<=m;i++)
                     
            for(j=1;j<=n;j++)
                     
            {
                        
            if(map[i][j]=='O')
                          s[i][j]
            =maxint;
                        
            else if(map[i][j]=='X')
                          s[i][j]
            =-1;
                     }

                   s[x2][y2]
            =0;
                   put(x2,y2);
                   
            while(!empty())
                   
            {
                      
            get(&xx,&yy);
                      
            if(xx>=2&&s[xx-1][yy]!=-1&&s[xx-1][yy]==maxint&&(xx-1!=x2||yy!=y2))
                      
            {
                         put(xx
            -1,yy);
                         s[xx
            -1][yy]=s[xx][yy]+1;
                      }

                      
            if(xx+1<=m&&s[xx+1][yy]!=-1&&s[xx+1][yy]==maxint&&(xx+1!=x2||yy!=y2))
                      
            {
                         put(xx
            +1,yy);
                         s[xx
            +1][yy]=s[xx][yy]+1;
                      }

                      
            if(yy>=2&&s[xx][yy-1]!=-1&&s[xx][yy-1]==maxint&&(xx!=x2||yy-1!=y2))
                      
            {
                         put(xx,yy
            -1);
                         s[xx][yy
            -1]=s[xx][yy]+1;
                      }

                      
            if(yy+1<=n&&s[xx][yy+1]!=-1&&s[xx][yy+1]==maxint&&(xx!=x2||yy+1!=y2))
                      
            {
                         put(xx,yy
            +1);
                         s[xx][yy
            +1]=s[xx][yy]+1;
                      }

                   }

                   
            for(i=1;i<=8;i++)
                   
            {
                      xx
            =x1+xd[i];
                      yy
            =y1+yd[i];
                      
            while( s[xx][yy]!=-1 && xx>=1 && xx<=&& yy>=1 && yy<=n )
                      
            {
                         ans
            =min(ans,s[xx][yy]);
                         xx
            +=xd[i];
                         yy
            +=yd[i];
                      }

                   }

                   
            if(ans!=maxint)
                      printf(
            "%ld\n",ans);
                   
            else
                      printf(
            "Impossible!\n");
                   scanf(
            "%ld %ld %ld %ld",&x1,&y1,&x2,&y2);
                }

            return 0;
            }

            posted on 2010-01-06 18:36 lee1r 閱讀(1084) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 題目分類(lèi):搜索
            无码人妻精品一区二区三区久久| 精品国产乱码久久久久久郑州公司 | 99久久免费国产特黄| 无码人妻久久一区二区三区免费 | 久久久久久狠狠丁香| 久久综合伊人77777麻豆| 亚洲欧美国产精品专区久久 | 久久精品国产99久久香蕉| 久久久久久精品无码人妻| 综合久久精品色| 亚洲欧美一级久久精品| 伊人久久综在合线亚洲2019 | 久久精品国产亚洲av麻豆色欲| 99热成人精品免费久久| 狼狼综合久久久久综合网| 青青热久久国产久精品| 国产精品日韩深夜福利久久| 中文字幕人妻色偷偷久久| 一本色道久久88综合日韩精品| 国产91久久精品一区二区| 欧洲精品久久久av无码电影| 久久午夜夜伦鲁鲁片免费无码影视 | 97久久精品无码一区二区| 久久久久久综合网天天| 色99久久久久高潮综合影院 | 国产精品一久久香蕉国产线看观看| 日韩久久无码免费毛片软件| 久久福利青草精品资源站免费| 久久久久免费看成人影片| 久久综合给合久久狠狠狠97色| 久久人人爽人人爽人人片av高请| 久久WWW免费人成一看片| 亚洲精品蜜桃久久久久久| 久久国产精品99精品国产| 精品久久久久久无码中文字幕一区| 久久精品人人做人人爽电影 | 97久久婷婷五月综合色d啪蜜芽 | 99麻豆久久久国产精品免费 | 91精品国产综合久久香蕉| 日韩精品久久久久久| 国产精品va久久久久久久|