• <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年7月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久人妻精品一区三寸蜜桃| 久久人人爽人人人人片av| 久久无码人妻一区二区三区 | 77777亚洲午夜久久多喷| 色88久久久久高潮综合影院| 国产精品久久久久久| 免费一级做a爰片久久毛片潮| 亚洲精品国产字幕久久不卡| 国产成人久久精品一区二区三区| 久久亚洲中文字幕精品一区四| 久久久久久国产精品美女| 91精品国产91久久久久久| 伊人久久一区二区三区无码| 久久A级毛片免费观看| 一本久久精品一区二区| 日韩精品国产自在久久现线拍| 国产亚洲精品久久久久秋霞 | 精品国产青草久久久久福利 | 久久精品无码一区二区日韩AV | 久久毛片免费看一区二区三区| 久久人人爽人人爽人人片AV不| 亚洲国产香蕉人人爽成AV片久久| 国产欧美久久久精品| 7777久久久国产精品消防器材| 精品99久久aaa一级毛片| 好久久免费视频高清| 久久亚洲精品成人AV| 色青青草原桃花久久综合| 久久精品免费网站网| 99久久精品国产一区二区三区 | 久久亚洲精品无码播放| 爱做久久久久久| 久久久艹| 亚洲精品综合久久| 2021国内久久精品| 四虎国产精品成人免费久久| 少妇无套内谢久久久久| 久久婷婷人人澡人人爽人人爱| 国产色综合久久无码有码| 国内精品伊人久久久久777| 欧美噜噜久久久XXX|