青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 97, 文章 - 22, 評論 - 81, 引用 - 0
數據加載中……

Pku 3346 Treasure of the Chimp Island (Bfs)

去年做杭州網賽的時候遇到的題目,當時一點思路都沒有,過后一直沒去做,今天看了一下,發現其實和hdu的1044很像,可以先縮圖,然后bfs,我用了兩次bfs實現。具體思路是對于每一個非墻非走廊的點進行bfs,擴展和它相鄰的非墻非走廊的點,保存到鄰接表中,然后對于所有邊界上是gate的點進行bfs,用優先隊列實現,狀態為三維,即坐標+內力,其實可以將每個點離散化到一個數字,以減少內存開銷來換取時間。

代碼如下:
#include <iostream>
#include 
<vector>
#include 
<queue>
using namespace std;

int dir[4][2= {{01}{0-1}{10}{-10}};
struct point {
    
int x;
    
int y;
    
int num;
    
int step;
    
bool friend operator < (point a, point b) {
        
return a.step > b.step;
    }

}
temp, tt;

char map[110][110];
vector 
< point > vec[101][101];
int n, m;
int hash[101][101];
priority_queue 
< point > q;
__int8 visit[
100][100][27];
int ans;

//縮圖
void bfs(int x, int y) {

    
int i;
    temp.x 
= x;
    temp.y 
= y;
    memset(hash, 
0sizeof(hash));
    
while(!q.empty() )
        q.pop();

    q.push( temp );
    hash[ temp.x ][ temp.y ] 
= 1;

    
while(!q.empty()) {

        temp 
= q.top();
        q.pop();
        
for(i = 0; i < 4; i++{
            tt.x 
= temp.x + dir[i][0];
            tt.y 
= temp.y + dir[i][1];

            
if(tt.x < 0 || tt.y < 0 || tt.x == n || tt.y == m)
                
continue;
            
if(map[tt.x][tt.y] == '*'
                
continue;
            
if(map[tt.x][tt.y] >= 'A' && map[tt.x][tt.y] <= 'Z')
                
continue;
            
if(map[tt.x][tt.y] == '#')
                
continue;
            
if(hash[ tt.x ][ tt.y ])
                
continue;

            
if(!hash[ tt.x ][ tt.y ] ) {
                hash[ tt.x ][ tt.y ] 
= 1;

                
if(map[tt.x][tt.y] == '.')
                    q.push( tt );
                
else {
                    vec[x][y].push_back( tt );
                }

            }

        }

    }

}


//求最短距離
int BFS(int x, int y, int num) {

    
int i;
    temp.step 
= 0;
    temp.x 
= x;
    temp.y 
= y;
    temp.num 
= num;

    
while(!q.empty())
        q.pop();

    memset(visit, 
-1sizeof(visit));
    q.push( temp );

    visit[ temp.x ][ temp.y ][ temp.num ] 
= 0;

    
while!q.empty() ) {
        temp 
= q.top();
        q.pop();

        
if(temp.step > ans && ans != -1)
            
return -1;

        
if( map[ temp.x ][ temp.y ] == '$')
            
return temp.step;

        
int size = vec[ temp.x ][ temp.y ].size();

        
for(i = 0; i < size; i++{
            point rt 
= vec[ temp.x ][ temp.y ][ i ];

            
if(map[rt.x][rt.y] == '$'{
                tt.num 
= temp.num;
                tt.step 
= temp.step;

                tt.x 
= rt.x;
                tt.y 
= rt.y;
                
if(tt.step < visit[ tt.x ][ tt.y ][ tt.num ]
                    
|| visit[ tt.x ][ tt.y ][ tt.num ] == -1{
                    visit[ tt.x ][ tt.y ][ tt.num ] 
= tt.step;
                    q.push( tt );
                }

                
continue;
            }


            
if(temp.num) {
                tt.num 
= temp.num - 1;
                tt.step 
= temp.step;
                tt.x 
= rt.x;
                tt.y 
= rt.y;
                
if(tt.step < visit[ tt.x ][ tt.y ][ tt.num ]
                    
|| visit[ tt.x ][ tt.y ][ tt.num ] == -1{
                    visit[ tt.x ][ tt.y ][ tt.num ] 
= tt.step;
                    q.push( tt );
                }

            }


            tt.num 
= temp.num;
            tt.step 
= temp.step + map[rt.x][rt.y] - '0';
            tt.x 
= rt.x;
            tt.y 
= rt.y;

            
if(tt.step < visit[ tt.x ][ tt.y ][ tt.num ]
                
|| visit[ tt.x ][ tt.y ][ tt.num ] == -1{
                visit[ tt.x ][ tt.y ][ tt.num ] 
= tt.step;
                q.push( tt );
            }

        }

    }


    
return -1;
}


int main() {

    
int i, j;
    
while(1{

        
while(gets(map[0])) {
            
if( strcmp(map[0], "") )
                
break;
        }
        
        m 
= strlen( map[0] );

        
if(strcmp(map[0], "--"== 0)
            
break;

        n 
= 1;
        
while(gets(map[n])) {
            
if(strcmp( map[n], "" ) == 0)
                
break;
            
else
                n 
++;
        }


        
for(i = 0; i < n; i++{
            
for(j = 0;j < m; j++)
                vec[i][j].clear();
        }


        
for(i = 0; i < n; i++{

            
for(j = 0; j < m; j++{

                
if(map[i][j] >= '1' && map[i][j] <= '9'{
                    bfs(i, j);
                }


                
if(map[i][j] >= 'A' && map[i][j] <= 'Z' || map[i][j] == '#'{
                    bfs(i, j);
                }

            }

        }


        ans 
= -1;
        
        
for(i = 0; i < n; i++{

            
for(j = 0; j < m; j++{

                
if(map[i][j] >= 'A' && map[i][j] <= 'Z'{
                    
int ty = BFS(i, j, map[i][j]-'A'+1);
                    
if(ty != -1{
                        
if(ty < ans || ans == -1)
                            ans 
= ty;
                    }

                }

                
if(map[i][j] == '#'{
                    
int ty = BFS(i, j, 0);    
                    
if(ty != -1{
                        
if(ty < ans || ans == -1)
                            ans 
= ty;
                    }

                }

            }

        }


        
if(ans == -1)
            printf(
"IMPOSSIBLE\n");
        
else
            printf(
"%d\n", ans);

    }

    
return 0;
}

posted on 2009-03-10 08:20 英雄哪里出來 閱讀(440) 評論(0)  編輯 收藏 引用 所屬分類: ACM

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            樱花yy私人影院亚洲| 亚洲国产一区二区三区在线播| 榴莲视频成人在线观看| 亚洲免费综合| 欧美1区2区3区| 久久av在线看| 国产精品久久二区二区| 亚洲国产欧美日韩| 国外成人免费视频| 亚洲视频欧美视频| 一区二区三区欧美激情| 麻豆精品一区二区av白丝在线| 久久精品国产免费看久久精品| 欧美日韩一区二区精品| 亚洲第一精品夜夜躁人人躁| 在线成人免费观看| 久久精品一区二区三区不卡| 欧美亚洲网站| 国产精品久久久久天堂| 妖精成人www高清在线观看| 日韩视频不卡| 欧美另类99xxxxx| 亚洲黑丝在线| 日韩视频久久| 欧美日韩a区| 99国产精品视频免费观看一公开| 亚洲欧洲一区二区天堂久久| 玖玖玖国产精品| 欧美国产激情二区三区| 亚洲高清自拍| 欧美高清在线视频| 亚洲巨乳在线| 亚洲小说欧美另类婷婷| 国产精品久久久久久户外露出| 日韩亚洲在线观看| 香蕉av777xxx色综合一区| 国产精品欧美一区喷水| 香蕉亚洲视频| 女人天堂亚洲aⅴ在线观看| 亚洲国产精品t66y| 欧美精品三级| 亚洲欧美日韩另类精品一区二区三区| 香蕉国产精品偷在线观看不卡 | 久久成人亚洲| 免费视频一区| 999亚洲国产精| 欧美亚洲动漫精品| 香蕉精品999视频一区二区| 老鸭窝91久久精品色噜噜导演| 精东粉嫩av免费一区二区三区| 久久人人超碰| 一区二区三区|亚洲午夜| 久久高清一区| 亚洲国产精品悠悠久久琪琪| 欧美激情亚洲自拍| 亚洲综合日韩在线| 免费观看不卡av| 日韩图片一区| 国产三级精品在线不卡| 免费观看30秒视频久久| 一本久道久久久| 另类天堂av| 亚洲香蕉网站| 欧美激情精品久久久久久大尺度| 99精品久久| 久久综合激情| 亚洲综合三区| 亚洲第一色中文字幕| 欧美日韩一区二区免费在线观看| 欧美亚洲一区在线| 亚洲精品影视| 玖玖玖国产精品| 亚洲曰本av电影| 亚洲韩国青草视频| 国产精品天天摸av网| 欧美国产精品中文字幕| 欧美伊人久久久久久久久影院| 亚洲国产精品一区二区尤物区 | 亚洲欧美一区二区在线观看| 欧美国产大片| 久久久高清一区二区三区| 99视频+国产日韩欧美| 国内综合精品午夜久久资源| 欧美天堂在线观看| 欧美chengren| 久久国产日韩| 午夜日韩激情| 亚洲在线电影| 日韩视频一区二区三区| 欧美a级一区| 久久亚洲精品中文字幕冲田杏梨| 午夜伦理片一区| 亚洲影院高清在线| 在线亚洲伦理| 一区二区三区 在线观看视频 | 亚洲欧美区自拍先锋| 亚洲美女电影在线| 亚洲第一综合天堂另类专| 国产偷国产偷精品高清尤物| 欧美天天在线| 国产精品久久国产三级国电话系列| 欧美黄污视频| 欧美精品v国产精品v日韩精品| 久久一区中文字幕| 久久米奇亚洲| 久久久久久国产精品一区| 欧美亚洲视频| 欧美一级大片在线免费观看| 亚洲欧美日韩成人| 新片速递亚洲合集欧美合集| 亚洲欧美日韩一区在线| 亚洲欧美卡通另类91av| 亚洲免费网址| 久久精品视频在线| 欧美影院成年免费版| 久久9热精品视频| 久久激情久久| 久久综合电影| 欧美极品在线观看| 欧美日韩你懂的| 国产精品视频久久一区| 国产农村妇女精品一区二区| 国产精品综合色区在线观看| 国产一区二区三区免费不卡| 精品1区2区| 亚洲毛片在线观看.| 亚洲午夜高清视频| 久久精品视频一| 欧美va天堂| 夜夜嗨一区二区| 欧美一级淫片播放口| 久久久97精品| 欧美日韩三级在线| 国产片一区二区| 亚洲欧洲精品一区二区三区不卡 | 午夜激情综合网| 久久久久九九九九| 亚洲第一色中文字幕| 一区二区三区视频观看| 午夜一区二区三视频在线观看| 久久频这里精品99香蕉| 欧美日韩色综合| 好看的日韩av电影| 日韩亚洲欧美中文三级| 午夜欧美精品| 欧美高清在线一区二区| 亚洲午夜精品在线| 久久在线免费观看| 国产精品v欧美精品v日韩| 一区二区在线免费观看| 在线视频欧美一区| 免费成人黄色片| 夜夜嗨av一区二区三区网页| 久久精品主播| 国产精品分类| 亚洲人成77777在线观看网| 亚洲欧美一区二区视频| 欧美国产三区| 欧美在线亚洲在线| 欧美体内谢she精2性欧美| 在线高清一区| 久久精品视频在线播放| 99精品视频一区二区三区| 久久亚洲影院| 国产日韩欧美| 亚洲私人黄色宅男| 亚洲国产福利在线| 久久se精品一区二区| 国产精品视频不卡| 亚洲免费黄色| 欧美激情免费在线| 久久精品中文字幕一区| 国产精品理论片| 夜夜爽99久久国产综合精品女不卡| 久久综合色一综合色88| 亚洲欧美综合v| 国产精品理论片| 亚洲一区网站| 亚洲美女在线一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产人久久人人人人爽| 亚洲欧美日韩中文视频| 亚洲欧洲偷拍精品| 另类av一区二区| 伊人婷婷欧美激情| 久久婷婷蜜乳一本欲蜜臀| 午夜亚洲一区| 国产精品永久免费在线| 午夜精品久久久久久久久久久久久| 日韩天堂在线视频| 欧美日韩国产首页| 一区二区三区**美女毛片 | 蜜臀av国产精品久久久久| 新67194成人永久网站| 国产精一区二区三区| 欧美在线不卡| 久久国产精品久久国产精品 | 在线亚洲自拍| 在线一区二区三区四区| 欧美新色视频|