• <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即可解決,沒有什么難度

            該題的難點在于如何求沿左、沿右走的問題
            剛開始,完全不知道這是什么意思,無奈只能在網上看代碼,總結如下:
            沿左策略的一般次序: left, up, right, down
            沿右策略的一般次序: right, up, left, down
            求解的關鍵是如何根據前一個方向以及一般次序來決定目前訪問上下左右四個方向的順序,例如:
            對于沿左前進策略,如果前一個方向是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 閱讀(237) 評論(0)  編輯 收藏 引用 所屬分類: B_搜索

            導航

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

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产69精品久久久久观看软件| 午夜福利91久久福利| 久久99国产亚洲高清观看首页| 久久久久久国产精品美女| 国产精品一区二区久久国产| 思思久久好好热精品国产| 伊人色综合久久天天| 久久精品国产亚洲av麻豆小说| 亚洲国产成人久久笫一页| 99久久精品免费看国产免费| 婷婷国产天堂久久综合五月| 99久久精品日本一区二区免费| 久久久久国产一区二区三区| 久久久久亚洲AV成人片| 理论片午午伦夜理片久久 | 久久婷婷五月综合成人D啪| 久久久久亚洲AV无码去区首| 久久精品99久久香蕉国产色戒 | 久久99精品国产一区二区三区 | 青青草原精品99久久精品66 | 国产免费久久久久久无码| 四虎国产精品免费久久5151| 久久亚洲综合色一区二区三区| 伊人久久大香线蕉综合Av| 久久天天躁狠狠躁夜夜网站| 亚洲综合久久夜AV | 久久精品国产福利国产琪琪| 免费观看久久精彩视频| 国产成人久久精品一区二区三区| 日产精品99久久久久久| 久久天天躁夜夜躁狠狠躁2022 | 久久精品亚洲一区二区三区浴池 | 91精品国产91热久久久久福利 | 国产精品久久影院| 国内精品久久久久久久久电影网| 久久综合久久伊人| 久久国产精品国语对白| 国产伊人久久| 综合久久精品色| 97精品依人久久久大香线蕉97| 久久久久国产精品嫩草影院|