題解 Code[vs] P1026 逃跑的拉爾夫

P1026 逃跑的拉爾夫


時(shí)間限制: 1 s
空間限制: 128000 KB
題目等級 : 黃金 Gold


題目描述 Decription

年輕的拉爾夫開玩笑地從一個小鎮(zhèn)上偷走了一輛車,但他沒想到的是那輛車屬于警察局嘱丢,并且車上裝有用于發(fā)射車子移動路線的裝置泡挺。
那個裝置太舊了,以至于只能發(fā)射關(guān)于那輛車的移動路線的方向信息熟菲。
編寫程序,通過使用一張小鎮(zhèn)的地圖幫助警察局找到那輛車椭更。程序必須能表示出該車最終所有可能的位置铣揉。
小鎮(zhèn)的地圖是矩形的饶深,上面的符號用來標(biāo)明哪兒可以行車哪兒不行」涔埃“.”表示小鎮(zhèn)上那塊地方是可以行車的敌厘,而符號“X”表示此處不能行車。拉爾夫所開小車的初始位置用字符的“*”表示朽合,且汽車能從初始位置通過俱两。
汽車能向四個方向移動:向北(向上),向南(向下)曹步,向西(向左)宪彩,向東(向右)。
拉爾夫所開小車的行動路線是通過一組給定的方向來描述的讲婚。在每個給定的方向尿孔,拉爾夫駕駛小車通過小鎮(zhèn)上一個或更多的可行車地點(diǎn)。

輸入描述 Input Description

輸入文件的第一行包含兩個用空格隔開的自然數(shù)R和C筹麸,1≤R≤50活合,1≤C≤50,分別表示小鎮(zhèn)地圖中的行數(shù)和列數(shù)物赶。
以下的R行中每行都包含一組C個符號(“.”或“X”或“*”)用來描述地圖上相應(yīng)的部位芜辕。
接下來的第R+2行包含一個自然數(shù)N,1≤N≤1000块差,表示一組方向的長度侵续。
接下來的N行幅行包含下述單詞中的任一個:NORTH(北)、SOUTH(南)憨闰、WEST(西)和EAST(東)状蜗,表示汽車移動的方向,任何兩個連續(xù)的方向都不相同鹉动。

輸出描述 Output Description

輸出文件應(yīng)包含用R行表示的小鎮(zhèn)的地圖(象輸入文件中一樣)轧坎,字符“*”應(yīng)該僅用來表示汽車最終可能出現(xiàn)的位置。

樣例輸入 Sample Input

4 5
.....
.X...
...*X
X.X..
3
NORTH
WEST
SOUTH

樣例輸出 Sample Output

.....
*****X*****..
**..X
X.X..

數(shù)據(jù)范圍及提示 Data Size & Hint

NULL

題解

不需要用BFS泽示,這里解釋DFS做法:
用一個f[i][j][k]數(shù)組表示在(i,j)位置第k個指令的訪問狀態(tài)缸血,都初始化成未訪問狀態(tài),然后走一步把一個位置更新為訪問狀態(tài)

C++代碼

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int m,n,k,a,b,x,y;
int map[51][51],ord[1010],vis[51][51],f[51][51][1010];
//map記錄地圖械筛,ord記錄指令捎泻,vis記錄可到達(dá)的點(diǎn)
//f[i][j][k]記錄(i,j)點(diǎn)第k個指令 

void print(){
    for(int i=1;i<=a;i++){
        for(int j=1;j<=b;j++){
            if(vis[i][j]){
                cout<<"*";
                continue;
            }
            if(map[i][j])cout<<".";
            if(!map[i][j])cout<<"X";
        }
        cout<<endl;
    }
}

void dfs(int x,int y,int cnt){
    if(cnt==n){
        vis[x][y]=1;
        return;
    }
    if(f[x][y][cnt]!=0)
        return;
    f[x][y][cnt]=1;
    if(ord[cnt]==1){
        while((x-1>=1) && (map[x-1][y])){  
            x--;  
            dfs(x,y,cnt+1);  
        }  
    }
    if(ord[cnt]==2){
        while((x+1<=a) && (map[x+1][y])){
            x++;
            dfs(x,y,cnt+1);
        }
    }
    if(ord[cnt]==3){
        while((y+1<=b) && (map[x][y+1])){
            y++;
            dfs(x,y,cnt+1);
        }
    }
    if(ord[cnt]==4){
        while((y-1>=1) && (map[x][y-1])){
            y--;
            dfs(x,y,cnt+1);
        }
    }
}

int main(){
    ios::sync_with_stdio(0);
    memset(vis,0,sizeof(vis));
    memset(f,0,sizeof(f));
    cin>>a>>b;
    for(int i=1;i<=a;i++)
        for(int j=1;j<=b;j++){
            char c;
            cin>>c;
            if(c=='.')map[i][j]=1;
            if(c=='X')map[i][j]=0;
            if(c=='*'){
                x=i;
                y=j;
                map[i][j]=1;
            }
        }
    cin>>n;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        if(s[0]=='N')ord[i]=1;
        if(s[0]=='S')ord[i]=2;
        if(s[0]=='E')ord[i]=3;
        if(s[0]=='W')ord[i]=4;
    }
    dfs(x,y,0);
    print();
    return 0;
} 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市埋哟,隨后出現(xiàn)的幾起案子笆豁,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闯狱,死亡現(xiàn)場離奇詭異煞赢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哄孤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門照筑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘦陈,你說我怎么就攤上這事凝危。” “怎么了双饥?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弟断。 經(jīng)常有香客問我咏花,道長,這世上最難降的妖魔是什么阀趴? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任昏翰,我火速辦了婚禮,結(jié)果婚禮上刘急,老公的妹妹穿的比我還像新娘棚菊。我一直安慰自己,他們只是感情好叔汁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布统求。 她就那樣靜靜地躺著,像睡著了一般据块。 火紅的嫁衣襯著肌膚如雪码邻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天另假,我揣著相機(jī)與錄音像屋,去河邊找鬼。 笑死边篮,一個胖子當(dāng)著我的面吹牛己莺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戈轿,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凌受,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了思杯?” 一聲冷哼從身側(cè)響起胁艰,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腾么,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈梳,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年解虱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了攘须。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡殴泰,死狀恐怖于宙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悍汛,我是刑警寧澤捞魁,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站离咐,受9級特大地震影響谱俭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宵蛀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一昆著、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧术陶,春花似錦凑懂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塘匣,卻和暖如春疤坝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馆铁。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工跑揉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埠巨。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓历谍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辣垒。 傳聞我的和親對象是個殘疾皇子望侈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 印象中開始看奧運(yùn)會是04年雅典奧運(yùn)會,那年暑假我即將從初二升至初三勋桶。學(xué)校要求從八月開始補(bǔ)二十天的課脱衙,那時(shí)最快...
    Dawn王不留行閱讀 237評論 0 0
  • 1 父母從老家過來幫我?guī)『⒕韬K于讓他們放下了多年的生意退唠,很早就不想讓他們做了,...
    NONO果閱讀 2,287評論 2 0