• <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 3083 Children of the Candy Corn

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

            思路:
            對于求最短路徑,BFS即可解決,沒有什么難度

            該題的難點在于如何求沿左、沿右走的問題
            剛開始,完全不知道這是什么意思,無奈只能在網(wǎng)上看代碼,總結(jié)如下:
            沿左策略的一般次序: left, up, right, down
            沿右策略的一般次序: right, up, left, down
            求解的關(guān)鍵是如何根據(jù)前一個方向以及一般次序來決定目前訪問上下左右四個方向的順序,例如:
            對于沿左前進策略,如果前一個方向是right,那么訪問次序是up, right, down, left(與前一個方向相反的方向總是放在最后)

            代碼:
              1 #define MAX_LEN 42
              2 #define QUEUE_LEN 1600
              3 #define is_valid(x, y) (x>=0 && x<row && y>=0 && y<col)
              4 char maze[MAX_LEN][MAX_LEN];
              5 int visited[MAX_LEN][MAX_LEN];
              6 int row, col;
              7 int start_x, start_y;
              8 /* left, up, right, down */
              9 const int dx[] = {0-101};
             10 const int dy[] = {-1010};
             11 /* right, up, left, down */
             12 const int dx_right[] = {0-101};
             13 const int dy_right[] = {10-10};
             14 int lcount, rcount;
             15 int head, tail;
             16 struct EACH {
             17     int x, y;
             18     int mv;
             19 } queue[QUEUE_LEN];
             20 
             21 
             22 void
             23 init()
             24 {
             25     int i;
             26     char *p;
             27     memset(visited, 0sizeof(visited));
             28     head = -1;
             29     tail = 0;
             30     lcount = rcount = 0;
             31     scanf("%d %d"&col, &row);
             32     for(i=0; i<row; i++) {
             33         scanf("%s", maze[i]);
             34         if((p=strchr(maze[i], 'S')) != NULL) {
             35             start_x = i;
             36             start_y = p-maze[i];
             37         }
             38     }
             39 }
             40 
             41 /*
             42  * dir: previous direction
             43  * switch(dir):
             44  *     case(right): up right down left (order)
             45  *     case(up):    left up right down
             46  *     case(left):  down left up right
             47  *     case(down):  right down left up
             48  */
             49 void
             50 dfs_left(int x, int y, int dir)
             51 {
             52     int i, tx, ty;
             53     ++lcount;
             54     if(maze[x][y] == 'E') {
             55         return;
             56     }
             57     dir = (dir+3)%4;
             58     for(i=0; i<4; i++) {
             59         tx = x + dx[(dir+i)%4];
             60         ty = y + dy[(dir+i)%4];
             61         if(is_valid(tx, ty) && maze[tx][ty]!='#') {
             62             dfs_left(tx, ty, (dir+i)%4);
             63             break;
             64         }
             65     }
             66 }
             67 
             68 void
             69 dfs_right(int x, int y, int dir)
             70 {
             71     int i, tx, ty;
             72     ++rcount;
             73     if(maze[x][y] == 'E'
             74         return;
             75     dir = (dir+3)%4;
             76     for(i=0; i<4; i++) {
             77         tx = x + dx_right[(dir+i)%4];
             78         ty = y + dy_right[(dir+i)%4];
             79         if(is_valid(tx, ty) && maze[tx][ty]!='#') {
             80             dfs_right(tx, ty, (dir+i)%4);
             81             break;
             82         }
             83     }
             84 }
             85 
             86 int 
             87 bfs()
             88 {
             89     int i, cx, cy, tx, ty, cmv;
             90     memset(visited, 0sizeof(visited));
             91     queue[tail].x = start_x;
             92     queue[tail].y = start_y;
             93     queue[tail].mv = 1;
             94     visited[start_x][start_y] = 1;
             95     while(head < tail) {
             96         ++head;
             97         cx = queue[head].x;
             98         cy = queue[head].y;
             99         cmv = queue[head].mv;
            100         if(maze[cx][cy] == 'E')
            101             return cmv;
            102         for(i=0; i<4; i++) {
            103             tx = cx + dx[i];
            104             ty = cy + dy[i];
            105             if(is_valid(tx, ty) && !visited[tx][ty] && maze[tx][ty]!='#') {
            106                 ++tail;
            107                 queue[tail].x = tx;
            108                 queue[tail].y = ty;
            109                 queue[tail].mv = cmv+1;
            110                 visited[tx][ty] = 1;
            111             }
            112         }
            113     }
            114 }

            posted on 2010-07-30 11:01 simplyzhao 閱讀(241) 評論(0)  編輯 收藏 引用 所屬分類: B_搜索

            導(dǎo)航

            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久成人精品| 久久久无码精品亚洲日韩按摩| 国产成人精品三上悠亚久久| 久久男人中文字幕资源站| 国产69精品久久久久99| 久久99国产精品久久久| 精品久久久久久国产| 久久亚洲国产精品一区二区| 青青青青久久精品国产h| 国产精品狼人久久久久影院| 精品国产热久久久福利| 精品久久久久国产免费| 亚洲国产成人精品91久久久 | 欧美午夜精品久久久久免费视| 久久亚洲AV成人无码软件| 亚洲精品无码专区久久久| 久久精品99久久香蕉国产色戒| 2021久久精品国产99国产精品| 99精品久久精品| 久久精品成人免费国产片小草| 2021国产精品午夜久久| 91精品国产91久久久久福利| 精品久久久久久无码人妻蜜桃| 无码国内精品久久人妻麻豆按摩| 精品久久久久久中文字幕大豆网| 国产精品一久久香蕉国产线看观看 | A级毛片无码久久精品免费| 亚洲国产婷婷香蕉久久久久久| 亚洲精品无码久久久久sm| 日本精品久久久久中文字幕8| 天堂无码久久综合东京热| 久久精品中文闷骚内射| 久久久久亚洲AV综合波多野结衣 | 亚洲狠狠婷婷综合久久蜜芽| 一级做a爰片久久毛片人呢| 久久久无码精品亚洲日韩京东传媒| 国内精品人妻无码久久久影院| 国产精品va久久久久久久| 色综合久久综合中文综合网| 久久天天躁狠狠躁夜夜av浪潮| 精品久久无码中文字幕|