• <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 閱讀(468) 評論(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
            久久丫精品国产亚洲av不卡| 精品无码久久久久久国产| 狠狠色丁香久久婷婷综合蜜芽五月| 亚洲伊人久久成综合人影院| 伊人色综合久久天天人手人婷 | 色综合久久夜色精品国产 | 久久精品国产亚洲av麻豆图片| 久久久久av无码免费网| 99久久免费国产精精品| 国产精品亚洲美女久久久| 欧美日韩精品久久免费| 久久久久中文字幕| 久久免费看黄a级毛片| 国产91久久精品一区二区| 香蕉久久夜色精品国产2020| 蜜桃麻豆www久久| 无码人妻久久一区二区三区免费| 丰满少妇人妻久久久久久4| 丁香色欲久久久久久综合网| 久久av免费天堂小草播放| 久久久久亚洲精品无码蜜桃| 午夜肉伦伦影院久久精品免费看国产一区二区三区| 亚洲伊人久久成综合人影院 | 国产一区二区精品久久凹凸| 久久国产精品99国产精| 久久这里的只有是精品23| 狠狠色综合久久久久尤物| 高清免费久久午夜精品| 久久Av无码精品人妻系列 | 免费精品久久天干天干| 国产免费久久精品99久久| 国产亚洲色婷婷久久99精品| 久久久亚洲裙底偷窥综合| 国产精品亚洲综合久久| 国产精品久久久久久五月尺| 亚洲精品乱码久久久久久不卡| 久久久久国产亚洲AV麻豆| 精品熟女少妇aⅴ免费久久| 久久艹国产| 久久久精品国产Sm最大网站| 日日狠狠久久偷偷色综合0|