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

            superman

            聚精會神搞建設(shè) 一心一意謀發(fā)展
            posts - 190, comments - 17, trackbacks - 0, articles - 0
               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            POJ 1915 - Knight Moves

            Posted on 2008-06-21 14:37 superman 閱讀(821) 評論(0)  編輯 收藏 引用 所屬分類: POJ
             1 /* Accepted 2488K 688MS G++ 3131B */
             2 #include <queue>
             3 #include <iostream>
             4 
             5 using namespace std;
             6 
             7 struct point { int x, y; } ;
             8 
             9 point dir[8= {
            10     {-2+1}, {-1+2}, {+1+2}, {+2+1},
            11     {+2-1}, {+1-2}, {-1-2}, {-2-1}
            12 };
            13 
            14 int n, a[300][300], b[300][300];
            15 
            16 inline bool inside(const int x, const int y)
            17 {
            18     if(x >= 0 && x < n && y >= 0 && y < n)
            19         return true;
            20     return false;
            21 }
            22 
            23 int bfs(int sx, int sy, int tx, int ty)
            24 {
            25     for(int i = 0; i < n; i++)
            26     for(int j = 0; j < n; j++)
            27         a[i][j] = b[i][j] = -1;
            28     
            29     a[sx][sy] = b[tx][ty] = 0;
            30     
            31     queue <point> l, r;
            32     point sp = { sx, sy };
            33     point tp = { tx, ty };
            34     l.push(sp); r.push(tp);
            35     
            36     point cp;
            37     while(l.empty() == false || r.empty() == false)
            38     {
            39         if(l.empty() == false)
            40         {
            41             cp = l.front(); l.pop();
            42             for(int i = 0; i < 8; i++)
            43             {
            44                 int x = cp.x + dir[i].x;
            45                 int y = cp.y + dir[i].y;
            46                 if(inside(x, y))
            47                 {
            48                     if(a[x][y] == -1)
            49                     {
            50                         a[x][y] = a[cp.x][cp.y] + 1;
            51                         point np = { x, y };
            52                         l.push(np);
            53                     }
            54                     if(b[x][y] != -1)
            55                         return a[x][y] + b[x][y];
            56                 }
            57             }
            58         }
            59         if(r.empty() == false)
            60         {
            61             cp = r.front(); r.pop();
            62             for(int i = 0; i < 8; i++)
            63             {
            64                 int x = cp.x + dir[i].x;
            65                 int y = cp.y + dir[i].y;
            66                 if(inside(x, y))
            67                 {
            68                     if(b[x][y] == -1)
            69                     {
            70                         b[x][y] = b[cp.x][cp.y] + 1;
            71                         point np = { x, y };
            72                         r.push(np);
            73                     }
            74                     if(a[x][y] != -1)
            75                         return a[x][y] + b[x][y];
            76                 }
            77             }
            78         }
            79     }
            80 }
            81 
            82 int main()
            83 {
            84     cin >> n;
            85     while(cin >> n)
            86     {
            87         int sx, sy, tx, ty;
            88         cin >> sx >> sy >> tx >> ty;
            89         
            90         if(sx == tx && sy == ty)
            91             cout << 0 << endl;
            92         else
            93             cout << bfs(sx, sy, tx, ty) << endl;
            94     }
            95     
            96     return 0;
            97 }
            98 
            无码乱码观看精品久久| 久久国产精品一国产精品金尊| 国产高潮国产高潮久久久| 国产精品美女久久久久久2018| 久久99国产精品久久久| 久久精品综合一区二区三区| 亚洲国产日韩欧美综合久久| 无码人妻精品一区二区三区久久 | 亚洲国产成人久久一区久久| 亚洲精品无码久久不卡| 久久超乳爆乳中文字幕| 人妻精品久久久久中文字幕| 久久久久亚洲av无码专区导航| 久久亚洲高清观看| 亚洲精品乱码久久久久久中文字幕| 久久被窝电影亚洲爽爽爽| 国产精品乱码久久久久久软件| 99久久久精品免费观看国产| 亚洲国产精品无码久久青草| 久久福利青草精品资源站| 伊人久久大香线蕉综合5g| 久久精品九九亚洲精品天堂| 中文字幕日本人妻久久久免费| 国产成人久久777777| 亚洲av成人无码久久精品 | 99久久婷婷国产综合亚洲| 亚洲国产成人精品女人久久久 | 久久久免费观成人影院| 久久99精品久久久久子伦| 一本一本久久a久久精品综合麻豆| 久久精品国产秦先生| 久久精品黄AA片一区二区三区| 无码人妻久久一区二区三区蜜桃 | 欧美激情精品久久久久| 国产69精品久久久久9999APGF| 欧美激情精品久久久久久| 色综合久久久久| 国产成人精品久久亚洲高清不卡| 精品国产乱码久久久久久郑州公司 | 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久九九兔免费精品6|