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

            學(xué)習(xí)心得(code)

            superlong@CoreCoder

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              74 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

            公告

            文字可能放在http://blog.csdn.net/superlong100,此處存放代碼

            常用鏈接

            留言簿(4)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新隨筆

            最新評(píng)論

            • 1.?re: Poj 1279
            • 對(duì)于一個(gè)凹多邊形用叉積計(jì)算面積 后能根據(jù)結(jié)果的正負(fù)來判斷給的點(diǎn)集的時(shí)針方向?
            • --bsshanghai
            • 2.?re: Poj 3691
            • 你寫的這個(gè)get_fail() 好像并是真正的get_fail,也是說fail指向的串并不是當(dāng)前結(jié)點(diǎn)的子串。為什么要這樣弄呢?
            • --acmer1183
            • 3.?re: HDU2295[未登錄]
            • 這個(gè)是IDA* 也就是迭代加深@ylfdrib
            • --superlong
            • 4.?re: HDU2295
            • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
            • --ylfdrib
            • 5.?re: HOJ 11482
            • 呵呵..把代碼發(fā)在這里很不錯(cuò)..以后我也試試...百度的編輯器太爛了....
            • --csuft1

            閱讀排行榜

            評(píng)論排行榜

            #include <stdio.h>
            #include 
            <memory.h>

            int  n, m, l, test;
            int  mv[4][2= {{0-1}, {-10}, {01}, {10}, };//left up right down
            int  pow[9= {01416642561024409616384};//for 4's pow

            bool tu[21][21];
            int  mym[21][21][65535];
            int  f[21][21];

            struct nod
            {
                
            int x, y, s, cost, step;
            };

            bool operator <(nod a, nod b)
            {
                
            return a.x < b.x || a.x == b.x && a.y < b.y ||
                    a.x 
            == b.x && a.y == b.y && a.s < b.s;
            }

            int si, sJ;
            nod ini;

            int cha(int x, int y)
            {
                
            if(x < 0return 1;
                
            if(x > 0return 3;
                
            if(y < 0return 0;
                
            if(y > 0return 2;
            }

            void read()
            {
                
            int i, x, y, tx, ty;
                scanf(
            "%d %d"&si, &sJ);
                x 
            = si; y = sJ;
                
            int ch = 0;
                
            for(i = 0; i < l - 1; i ++)
                {
                    scanf(
            "%d %d"&tx, &ty);
                    ch 
            = ch * 4 + cha(tx - x, ty - y);
                    x 
            = tx; 
                    y 
            = ty;
                }
                ini.s 
            = ch;
                ini.x 
            = si; ini.y = sJ;
                
            int stone;
                memset(tu, 
            0sizeof(tu));
                scanf(
            "%d"&stone);
                
            for(i = 0; i < stone; i ++)
                {
                    scanf(
            "%d %d"&x, &y);
                    tu[x][y] 
            = 1;
                }
            }

            int open, close, first;
            nod q[
            1000001];

            bool ok(nod t, int index)
            {
                
            short dx = t.x + mv[index][0], dy = t.y + mv[index][1];
                
            short x, y;;
                x 
            = t.x;
                y 
            = t.y;
                
            for(int i = 0; i < l - 1; i ++)
                {
                    x 
            = x + mv[ t.s / pow[l - 1 - i] ][0];
                    y 
            = y + mv[ t.s / pow[l - 1 - i] ][1];
                    
            if(x == dx && y == dy) return false;
                    t.s 
            = t.s % pow[l - 1 - i];
                }
                
            return true;
            }

            void change(int &ch, int i)
            {
                ch 
            = ch >> 2;
                ch 
            += ((i + 2% 4* pow[l - 1];
            }

            bool check(nod t)
            {
                
            short xx = t.x, yy = t.y;
                
            if(xx < 1 || xx > n || yy < 1 || yy > m) return false;
                
            if(tu[xx][yy]) return false;
                
            return true;
            }

            void heap(nod tp)
            {
                nod tmp;
                tmp 
            = q[++open] = tp;
                
            int i = open, J = i / 2;
                
            while( i > first)
                {
                    
            if( tmp.cost < q[J].cost && J > first)
                    {
                        q[i] 
            = q[J];
                        i 
            = J;
                        J 
            = i / 2;
                    }
                    
            else 
                        
            break;
                }
                q[i] 
            = tmp;
            }

            bool expend(nod temp)
            {
                nod t;
                
            for(int i = 0; i < 4; i ++)
                
            if(ok(temp, i))
                {
                    t 
            = temp;
                    t.x 
            += mv[i][0];
                    t.y 
            += mv[i][1];
                    t.step 
            ++;
                    
            if(t.x == 1 && t.y == 1return true;
                    change(t.s, i); 
                    
            if(check(t) && mym[t.x][t.y][t.s] != test)
                    {
                        mym[t.x][t.y][t.s] 
            = test;
                        t.cost 
            = f[t.x][t.y] + t.step;
                        heap(t);
                    }
                }
                
            return false;
            }

            int bfs()
            {
                nod temp;
                close 
            = -1;    open = 0;
                q[
            0= ini;
                q[
            0].cost = f[ini.x][ini.y];
                q[
            0].step = 0;
                
            if(ini.x == 1 && ini.y == 1return 0;
                mym[ini.x][ini.y][ini.s] 
            = test;
                
            int size;
                
            while(close < open)
                {
                    temp 
            = q[++ close];
                    first 
            = close + 1;
                    
            if(expend(temp)) return temp.step + 1;
                }
                
            return -1;
            }

            struct td{int x, y;}que[1001];
            bool ha[21][21];
            void pre()
            {
                close 
            = -1, open = 0;
                memset(ha,
            0,sizeof(ha));
                td t;
                que[
            0].x = 1;
                que[
            0].y = 1;
                ha[
            1][1= 1;
                f[
            1][1= 0;
                
            while(close < open)
                {
                    t 
            = que[++close];
                    
            for(int i = 0; i < 4; i ++)
                    {
                        
            int x = t.x + mv[i][0], y = t.y + mv[i][1];
                        
            if(x < 1 || x > n || y < 1 || y > m) continue;
                        
            if(ha[x][y] || tu[x][y]) continue;
                        ha[x][y] 
            = 1;
                        f[x][y] 
            = f[t.x][t.y] + 1;
                        que[
            ++open].x = x;
                        que[open].y 
            = y;
                    }
                }
            }

            int main()
            {
                freopen(
            "in.txt","r",stdin);
                test 
            = 0;
                
            while(scanf("%d %d %d"&n, &m, &l), n||m||l)
                {
                    read();
                    pre();
                    
            ++test;
                    printf(
            "Case %d: %d\n",test,bfs());
                }
                
            while(1);
            }

            posted on 2009-09-01 19:18 superlong 閱讀(170) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久人人爽人人爽人人AV东京热| 久久久久久免费一区二区三区| 久久精品无码专区免费青青| 欧洲性大片xxxxx久久久| 久久综合九色综合久99| 国产精品久久午夜夜伦鲁鲁| 国内精品久久久久影院优| 久久亚洲春色中文字幕久久久| 亚洲中文久久精品无码| 午夜天堂av天堂久久久| 久久国产精品无码一区二区三区 | 91麻豆精品国产91久久久久久| 俺来也俺去啦久久综合网| 国产精品久久久久…| 色综合久久最新中文字幕| 国产成人精品久久| 亚洲成av人片不卡无码久久| 99久久精品国产一区二区 | 久久综合综合久久狠狠狠97色88| 天天久久狠狠色综合| 四虎国产精品成人免费久久| 久久精品亚洲AV久久久无码| 久久国产热精品波多野结衣AV| 丁香五月网久久综合| 久久国产乱子伦精品免费午夜| 亚洲伊人久久成综合人影院| 欧洲人妻丰满av无码久久不卡| 国产午夜精品理论片久久影视| 久久国产成人午夜aⅴ影院| 久久天天婷婷五月俺也去| 国内精品久久久久久99蜜桃| 激情久久久久久久久久| 久久久久久精品免费免费自慰| 欧美久久综合性欧美| 久久精品国产久精国产果冻传媒| 国产精品99久久精品| 久久综合久久美利坚合众国| 岛国搬运www久久| 日韩人妻无码精品久久免费一 | 久久亚洲中文字幕精品有坂深雪 | 国产精品99久久99久久久|