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

            聚精會神搞建設 一心一意謀發展
            posts - 190, comments - 17, trackbacks - 0, articles - 0
               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            POJ 2157 - Maze

            Posted on 2008-06-21 10:40 superman 閱讀(470) 評論(1)  編輯 收藏 引用 所屬分類: POJ
              1 #include <queue>
              2 #include <iostream>
              3 
              4 using namespace std;
              5 
              6 struct point { int x, y; } ;
              7 
              8 int n, m, T;
              9 char map[20][20];
             10 
             11 bool door[5]; int key[5];
             12 
             13 int x[20][20];
             14 void bfs(int sx, int sy)
             15 {
             16     map[sx][sy] = 'T';
             17     
             18     point sp = { sx, sy };
             19     
             20     queue <point> q;
             21     q.push(sp);
             22     
             23     point cp;
             24     while(q.empty() == false)
             25     {
             26         cp = q.front(); q.pop();
             27         
             28         x[cp.x][cp.y] = T;
             29         
             30         if(map[cp.x][cp.y] >= 'A' && map[cp.x][cp.y] <= 'E')
             31             continue;
             32         
             33         //up
             34         if(cp.x - 1 >= 0 && x[cp.x - 1][cp.y] == 0 && map[cp.x - 1][cp.y] != '|')
             35         {
             36             point np = { cp.x - 1, cp.y };
             37             q.push(np);
             38         }
             39         //down
             40         if(cp.x + 1 < n && x[cp.x + 1][cp.y] == 0 && map[cp.x + 1][cp.y] != '|')
             41         {
             42             point np = { cp.x + 1, cp.y };
             43             q.push(np);
             44         }
             45         //left
             46         if(cp.y - 1 >= 0 && x[cp.x][cp.y - 1== 0 && map[cp.x][cp.y - 1!= '|')
             47         {
             48             point np = { cp.x, cp.y - 1};
             49             q.push(np);
             50         }
             51         //right
             52         if(cp.y + 1 < m && x[cp.x][cp.y + 1== 0 && map[cp.x][cp.y + 1!= '|')
             53         {
             54             point np = { cp.x, cp.y + 1};
             55             q.push(np);
             56         }
             57     }
             58 }
             59 
             60 int main()
             61 {
             62     while(scanf("%d %d"&n, &m) != EOF)
             63     {
             64         if(n == 0 && m == 0)
             65             break;
             66         
             67         memset(x, falsesizeof(x));
             68         memset(door, falsesizeof(door));
             69         memset(key, 0sizeof(key));
             70         
             71         int sx, sy, tx, ty;
             72         
             73         sx = sy = tx = ty = -1;
             74         for(int i = 0; i < n; i++)
             75         for(int j = 0; j < m; j++)
             76         {
             77             cin >> map[i][j];
             78             if(map[i][j] == 'S') sx = i, sy = j;
             79             if(map[i][j] == 'G') tx = i, ty = j;
             80             if(map[i][j] == 'X') map[i][j] = '|';
             81         }
             82         
             83         if(sx == -1 || sy == -1 || tx == -1 || ty == -1)
             84         {
             85             cout << "NO" << endl; continue;
             86         }
             87         
             88         for(int i = 0; i < n; i++)
             89         for(int j = 0; j < m; j++)
             90             if(map[i][j] >= 'A' && map[i][j] <= 'E')
             91                 door[map[i][j] - 'A'= true;
             92         
             93         for(int k = 0; k < 5; k++)
             94             if(door[k] == false)
             95                 for(int i = 0; i < n; i++)
             96                 for(int j = 0; j < m; j++)
             97                     if(map[i][j] == char(k + 'a'))
             98                         map[i][j] = '.';
             99         
            100         for(int i = 0; i < n; i++)
            101         for(int j = 0; j < m; j++)
            102             if(map[i][j] >= 'a' && map[i][j] <= 'e')
            103                 key[map[i][j] - 'a']++;
            104         
            105         T = 1;
            106         bfs(sx, sy);
            107         
            108         if(x[tx][ty])
            109         {
            110             cout << "YES" << endl; continue;
            111         }
            112         int keycnt[5= { 0 };
            113         while(true)
            114         {
            115             for(int i = 0; i < n; i++)
            116             for(int j = 0; j < m; j++)
            117                 if(x[i][j] == T && map[i][j] >= 'a' && map[i][j] <= 'e')
            118                     keycnt[map[i][j] - 'a']++;
            119             
            120             T++;
            121             bool flag = false;
            122             for(int k = 0; k < 5; k++)
            123                 if(door[k] && key[k] && keycnt[k] == key[k])
            124                     for(int i = 0; i < n; i++)
            125                     for(int j = 0; j < m; j++)
            126                         if(x[i][j] && map[i][j] == char(k + 'A'))
            127                         {
            128                             bfs(i, j); door[k] = false; flag = true;
            129                         }
            130             
            131             if(flag == false)
            132             {
            133                 cout << "NO" << endl; break;
            134             }
            135             if(x[tx][ty])
            136             {
            137                 cout << "YES" << endl; break;
            138             }
            139         }
            140     }
            141     
            142     return 0;
            143 }
            144 

            Feedback

            # re: POJ 2157 - Maze  回復  更多評論   

            2009-03-07 14:22 by 生活要低調
            有沒有測試數據,在網上找的測試全A,但是交上去就WA
            久久这里只精品99re66| 久久国产成人亚洲精品影院| 久久久久久久综合狠狠综合| 四虎亚洲国产成人久久精品| 成人午夜精品无码区久久| 国产精品一久久香蕉国产线看观看| 韩国免费A级毛片久久| 精品久久国产一区二区三区香蕉| 久久婷婷是五月综合色狠狠| 久久精品天天中文字幕人妻| 精品久久久久久国产牛牛app| 2021国产精品午夜久久| 精品久久久久久国产| 亚洲精品午夜国产va久久| …久久精品99久久香蕉国产| 精品久久久久久久中文字幕 | 久久综合视频网站| 无码人妻少妇久久中文字幕蜜桃| 久久国产三级无码一区二区| 亚洲AV无码成人网站久久精品大| 久久精品国产亚洲精品| 精品国产乱码久久久久久1区2区 | 国产三级精品久久| 国产成人精品久久一区二区三区| 伊人久久大香线蕉成人| 精品久久久久久无码国产| 国产一级持黄大片99久久| 三上悠亚久久精品| 久久人妻AV中文字幕| 一日本道伊人久久综合影| 久久青青草原精品国产软件| 精品久久久久久99人妻| 久久婷婷综合中文字幕| 91精品国产9l久久久久| 久久精品国产精品亚洲毛片| 久久无码人妻一区二区三区午夜| 囯产极品美女高潮无套久久久| 精品久久久久久久国产潘金莲| 欧美久久一级内射wwwwww.| 久久亚洲天堂| 中文字幕久久精品|