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

            A Za, A Za, Fighting...

            堅信:勤能補拙

            PKU 1324 Holedox Moving

            問題:
            http://acm.pku.edu.cn/JudgeOnline/problem?id=1324

            參考:
            http://hi.baidu.com/aekdycoin/blog/item/08774afbd1a29316a8d31111.html
            http://clover520.blogbus.com/logs/38001465.html

            思路:
            用BFS求最短路徑肯定是沒有問題的,關鍵是狀態如何表示
            參考別人的思路,原來蛇身只需要通過上、下、左、右四個方向表示即可(兩bits或4進制),這樣可以很大程度上減少空間,而且判重也就不再是個問題,只需要用三維數組表示即可
            不過我自己寫出來的代碼卻總是MLE,悲劇...(無奈,貼了別人代碼過的,無恥啊)

            代碼:
             1 #include<stdio.h>
             2 #include<stdlib.h>
             3 #include<string.h>
             4 
             5 int kk[4][2]={1,0,0,1,0,-1,-1,0},N,M,L;
             6 struct point{
             7     char x,y;
             8     int dis,body;
             9 };
            10 int bfs();
            11 int main(){
            12     int Cas=0;
            13     while(scanf("%d%d%d",&N,&M,&L)==3){
            14         if(N==0&&M==0&&L==0)break;
            15         printf("Case %d: %d\n",++Cas,bfs());
            16     }
            17     return 0;
            18 }
            19 char viss[20][20][1<<14];
            20 int vis(struct point* t){
            21     int ans=0,i=0;
            22     if(viss[t->x][t->y][t->body])return 1;
            23     viss[t->x][t->y][t->body]=1;
            24     return 0;
            25 }
            26 char map[20][20],mapt[20][20];
            27 char valid(int x,int y){
            28     if(x<0||x>=N||y<0||y>=M||mapt[x][y])return 0;
            29     return 1;
            30 }
            31 struct point Q[20*20*(1<<14)];
            32 int head,tail;
            33 int bfs(){
            34     int x,y,lx,ly,i,k,nx,ny;
            35     struct point t,now;
            36     memset(viss,0,sizeof(viss));
            37     scanf("%d%d",&lx,&ly);
            38     t.x=lx-1;t.y=ly-1;t.dis=0;t.body=0;
            39     for(i=1;i<L;++i){
            40         scanf("%d%d",&x,&y);
            41         for(k=0;k<4;++k)if(lx+kk[k][0]==x&&ly+kk[k][1]==y)break;
            42         t.body|=k<<((i-1)<<1);
            43         lx=x;ly=y;
            44     }
            45     memset(map,0,sizeof(map));
            46     scanf("%d",&k);
            47     for(i=0;i<k;++i){
            48         scanf("%d%d",&x,&y);
            49         map[x-1][y-1]=1;
            50     }
            51     head=tail=0;
            52     Q[tail++]=t;
            53     vis(&t);
            54     while(head!=tail){
            55         now=Q[head++];
            56         if(now.x==0&&now.y==0)return now.dis;
            57         
            58         memcpy(mapt,map,sizeof(map));
            59         mapt[x=now.x][y=now.y]=1;
            60         int s=now.body;
            61         for(i=1;i<L;++i,s>>=2){
            62             k=s&3;
            63             mapt[x=x+kk[k][0]][y=y+kk[k][1]]=1;
            64         }
            65         
            66         for(k=0;k<4;++k){
            67             if(!valid(nx=now.x+kk[k][0],ny=now.y+kk[k][1]))continue;
            68             t.x=nx,t.y=ny;
            69             t.body=((now.body<<2)|(3-k))&((1<<((L-1)<<1))-1);
            70             t.dis=now.dis+1;
            71             if(!vis(&t)){
            72                 Q[tail++]=t;
            73             }
            74         }
            75     }
            76     return -1;
            77 }

            posted on 2010-09-03 10:05 simplyzhao 閱讀(327) 評論(0)  編輯 收藏 引用 所屬分類: B_搜索

            導航

            <2010年9月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            日产精品久久久久久久性色| 久久综合九色综合精品| 欧美激情精品久久久久久| 久久久久综合国产欧美一区二区| 蜜桃麻豆www久久国产精品| 一级a性色生活片久久无| 东京热TOKYO综合久久精品| 国产女人aaa级久久久级| 亚洲精品国产自在久久| 久久ZYZ资源站无码中文动漫| 国产精品狼人久久久久影院| 精品国产青草久久久久福利| 99久久国产热无码精品免费久久久久| 亚洲国产成人久久一区久久| 欧美亚洲国产精品久久蜜芽| 伊人久久大香线焦AV综合影院| 亚洲成色999久久网站| 青青草原精品99久久精品66| 精品久久久久久无码免费| 伊人久久无码中文字幕| 久久亚洲国产成人精品无码区| 国产精品久久久久久福利漫画 | 国内精品久久久久久不卡影院| 性做久久久久久久久浪潮| 久久综合九色综合97_久久久| 亚洲精品白浆高清久久久久久 | 久久一区二区免费播放| 久久99精品国产99久久6男男| 7777精品久久久大香线蕉| 久久精品无码一区二区日韩AV| 69久久精品无码一区二区| 国产精品国色综合久久| 中文国产成人精品久久不卡 | 久久久久亚洲精品日久生情| 久久久久亚洲AV无码专区网站| 免费精品99久久国产综合精品| avtt天堂网久久精品| 久久99国产精品尤物| 欧美伊香蕉久久综合类网站| 欧美激情精品久久久久| 国产精品亚洲综合专区片高清久久久|