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

隨筆 - 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 英雄哪里出來 閱讀(433) 評論(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>
            亚洲高清自拍| 欧美日韩亚洲视频| 国产日韩成人精品| 亚洲天堂免费在线观看视频| 亚洲欧洲精品一区二区| 欧美激情在线播放| 亚洲在线免费观看| 欧美一区三区二区在线观看| 红桃视频国产精品| 亚洲国产婷婷| 国产精品户外野外| 久久久久亚洲综合| 欧美国产综合视频| 午夜精品久久久久久99热软件| 午夜欧美大片免费观看| 亚洲第一中文字幕| 99精品欧美一区二区蜜桃免费| 国产精品久久久久久亚洲调教 | 裸体丰满少妇做受久久99精品| 亚洲高清免费视频| 亚洲一区二区免费视频| 禁断一区二区三区在线| 亚洲精品中文字幕在线| 国产性做久久久久久| 亚洲国产一区二区三区高清| 国产伦精品一区二区三区高清| 免费黄网站欧美| 国产精品成人一区二区艾草| 欧美11—12娇小xxxx| 国产精品草草| 亚洲国产精品嫩草影院| 国产主播一区| 亚洲香蕉成视频在线观看| 亚洲国产精品久久久久婷婷884| 中文在线不卡视频| 亚洲日韩欧美一区二区在线| 新狼窝色av性久久久久久| 一本色道久久综合亚洲精品高清| 欧美主播一区二区三区| 亚洲一区二区三区在线观看视频 | 久久在线免费视频| 亚洲伊人伊色伊影伊综合网| 免费永久网站黄欧美| 久久久久国产成人精品亚洲午夜| 欧美日韩一本到| 亚洲成人在线视频网站| 国内成人精品2018免费看| 亚洲少妇一区| 亚洲一级黄色片| 欧美激情在线| 91久久在线视频| 亚洲第一页在线| 久久福利视频导航| 久久精品国产视频| 国产免费成人在线视频| 亚洲一级高清| 午夜久久电影网| 国产精品入口日韩视频大尺度| 亚洲美女福利视频网站| 日韩视频一区二区三区在线播放免费观看 | 亚洲第一狼人社区| 在线精品视频一区二区三四| 欧美中文字幕精品| 开心色5月久久精品| 激情欧美亚洲| 老司机67194精品线观看| 欧美成年视频| 日韩西西人体444www| 欧美久久久久久| 亚洲美女精品成人在线视频| 一区二区三区欧美在线| 欧美性一二三区| 亚洲一区在线看| 久久精品国语| 亚洲国产婷婷香蕉久久久久久| 六月婷婷一区| 亚洲日本成人女熟在线观看| 宅男噜噜噜66一区二区66| 欧美性猛片xxxx免费看久爱| 亚洲在线观看免费视频| 久久精品一区二区三区不卡| 红桃视频亚洲| 欧美精品91| 亚洲一区三区电影在线观看| 久久久97精品| 亚洲毛片在线观看| 国产精品毛片a∨一区二区三区| 亚洲欧美国产日韩中文字幕 | 亚洲国产精品久久久久秋霞蜜臀 | 欧美日韩一区二区三区免费看| 亚洲区欧美区| 欧美一区二区在线免费播放| 狠狠色噜噜狠狠狠狠色吗综合| 免费亚洲网站| 亚洲综合国产| 亚洲国产另类 国产精品国产免费| 夜夜嗨av色综合久久久综合网| 国产精品视频九色porn| 久久久久欧美| 亚洲一区二区三区在线| 欧美成人免费全部| 亚洲免费视频成人| 亚洲激情综合| 国产婷婷成人久久av免费高清 | 欧美在线观看视频一区二区三区| 欧美成人tv| 欧美一区二区三区久久精品| 亚洲黄色一区| 国产一区在线播放| 欧美性淫爽ww久久久久无| 久久久久久久一区二区三区| 在线视频你懂得一区| 欧美不卡在线视频| 久久精品免费播放| 亚洲淫片在线视频| 一本不卡影院| 亚洲区第一页| 雨宫琴音一区二区在线| 国产欧美另类| 欧美四级在线| 欧美日韩精品在线视频| 裸体丰满少妇做受久久99精品| 午夜视频一区| 亚洲一区视频在线| 一区二区高清在线观看| 亚洲精品乱码久久久久久日本蜜臀 | 久久久精品国产免费观看同学 | 欧美成人精品不卡视频在线观看| 午夜视频久久久| 亚洲免费网站| 亚洲一区二区四区| 亚洲视频在线观看网站| 亚洲精品网址在线观看| 91久久亚洲| 亚洲国产三级在线| 亚洲韩国青草视频| 亚洲高清在线视频| 亚洲国产成人精品女人久久久| 国色天香一区二区| 激情亚洲成人| 在线看片欧美| 亚洲人成人77777线观看| 亚洲国产国产亚洲一二三| …久久精品99久久香蕉国产| 黄色亚洲网站| 在线播放豆国产99亚洲| 在线观看国产欧美| 亚洲激情不卡| 99re6热只有精品免费观看 | 国产一区av在线| 国产亚洲午夜| 136国产福利精品导航| 在线观看日韩欧美| 日韩视频精品在线| 亚洲一二三区精品| 久久国产福利| 免费黄网站欧美| 亚洲欧洲一区二区三区| 日韩视频在线播放| 亚洲伊人网站| 久久久91精品国产| 欧美1区视频| 国产精品扒开腿做爽爽爽软件| 国产精品亚洲一区二区三区在线| 国产毛片一区| 亚洲成色最大综合在线| 夜夜嗨av一区二区三区中文字幕| 亚洲影视在线播放| 另类国产ts人妖高潮视频| 欧美高清视频| 亚洲午夜免费视频| 久久视频国产精品免费视频在线| 另类综合日韩欧美亚洲| 欧美偷拍另类| 黄色精品一区| 亚洲在线免费观看| 免费亚洲视频| 中文久久乱码一区二区| 久久久久国内| 国产精品黄色| 亚洲人成在线播放| 久久精品99国产精品| 91久久午夜| 久久精品导航| 国产精品久久久久久久电影| 亚洲高清在线精品| 欧美在线免费| 99成人在线| 美女精品视频一区| 国产精品午夜在线| 日韩天天综合| 免费亚洲一区二区| 亚洲欧美日韩系列| 欧美视频中文在线看| 亚洲日本va午夜在线影院| 久久久蜜桃一区二区人| 亚洲视频电影图片偷拍一区| 猛干欧美女孩| 精品不卡在线| 久久九九精品99国产精品|