codevs1337 銀行里的迷宮

題目:

題目描述 Description
楚楚每一次都在你的幫助下過了一關(guān)又一關(guān)(比如他開宴會(huì))。這一次,你的才華讓楚楚被劫住了!(好心辦了壞事啊,下次不理他了==)
歹徒: hehe~
楚楚:(冷汗ing)干啥^
^!(PS:現(xiàn)在還笑得出來?。。?
歹徒:搶劫的說~
楚楚:你們想干啥??!(PS:不是告訴你了,是搶劫~)
歹徒:這里是銀行的陷阱,也就是一個(gè)迷宮……你要帶我們離開這里……否則……
楚楚:(想:那你是咋抓到我的,郁悶)好吧……
楚楚認(rèn)為生命還是最重要的……(大不了出去以后找警察……)
于是,他認(rèn)命了……
他從歹徒口中得知這是一個(gè)方形的迷宮(歹徒老大:你還要啥形狀的,跟我說一聲!),他們的位置是[1,1],要走到[n,m],長(zhǎng)是n,寬是m,這是一個(gè)很大的迷宮,里面有陷阱(小明:能不能踩進(jìn)去的,說!楚楚:當(dāng)然不能,不過可以用輕功,多花一秒蓄力用輕功走過的陷阱會(huì)石化,變成路,而且剛好走過 歹徒想:蝦米輕功明明是殺人利器還好沒和他打起來),還有墻(PS:說一聲,墻不能穿過,雖有輕功,但是還是過不去墻,這個(gè)墻也是銀行的秘密即使你是神犇也不行哦~ 楚楚:又坑我~)。(小明:路呢? 楚楚:廢話,當(dāng)然有,只不過這是銀行機(jī)密,不能說!)
楚楚想在最短時(shí)間里走出迷宮(小明:否則歹徒會(huì)發(fā)怒的,對(duì)不對(duì)? 楚楚:廢話!),若是超過了歹徒老大的忍耐時(shí)間time,那就……
(楚楚:小明……SOS,別忘了幫我報(bào)警!! 傳呼機(jī):嘀,嘀,嘀…… 楚楚:咋么可以這樣!可惡!)于是,他順便還要去找電話報(bào)個(gè)警(報(bào)警不需要時(shí)間,打通即可。且電話機(jī)可能有多個(gè),但也沒有可能沒有~)。
楚楚:我的預(yù)感告訴我,這個(gè)迷宮只能向右或下走郁悶了
輸入描述 Input Description
第1行是n,m, time,三個(gè)整數(shù)。
第2到n+1行每行有m個(gè)字母(有大寫也有小寫的)(楚楚:歹徒真笨,就不能翻譯一下嗎)。
字母解析:T(t)是陷阱,W(w)是墻,R(r)是路,A(a)是電話~ (遇到不認(rèn)識(shí)的字符就~算之為路!)
輸出描述 Output Description
僅一行走出迷宮的最小時(shí)間t(走一步要一秒的說),不能在規(guī)定時(shí)間走出迷宮,或者打不了電話,請(qǐng)輸出“Oh my god!”(不包括引號(hào))。
樣例輸入 Sample Input
3 3 100
RRR
WWA
TRR
樣例輸出 Sample Output
4
數(shù)據(jù)范圍及提示 Data Size & Hint
時(shí)間限制**** Time Limitation
各個(gè)測(cè)試點(diǎn)1s
**注釋**** Hint******
10%的數(shù)據(jù) n≤20,m≤20
100%的數(shù)據(jù) n≤500,m≤500,time≤100000,不保證[1,1]或者[n,m]不是墻的說,且若[1,1]或者[n,m]不是路,那么就不能活著回去了……
數(shù)據(jù)解析:
由于楚楚一開始就站在1,1上,所以走這一塊不用時(shí)間~

此題是一道走迷宮的題,可以先判定第一個(gè)和最后一個(gè)的情況,如果不是路就死。
之后我們可以用一個(gè)數(shù)組表示到當(dāng)前為止共走了多少秒(此題只能向下或向右走),注意遇到陷阱可以走,但需要多加1s.
遇到電話就計(jì)數(shù)。
最后判定時(shí)間和有無電話即可。

參考代碼:

#include <iostream>
#include <cstring>
using namespace std;
char map[505][505];
int dp[505][505];
void setmap(char map[][505],int n,int m) {
    for (int i = 0;i < n;++i) {
        for (int j = 0;j < m;++j) {
            cin >> map[i][j];
        }
    }
}
int flag;
void dfs(int i,int j,int n,int m,int time) {
    for (int i = 0;i < n;++i) {
        for (int j = 0;j < m;++j) {
            if (i == 0 && j == 0) continue;
            dp[i][j] = 99999;
            if (map[i][j] == 'W' || map[i][j] == 'w') continue;
            if (map[i][j] == 'A' || map[i][j] == 'a') {
                flag = 1;
            }
            if (i-1>=0 && dp[i-1][j]<dp[i][j]) {
                dp[i][j] = dp[i-1][j] + 1;
            }
            if (j-1>=0 && dp[i][j-1]<dp[i][j]) {
                dp[i][j] = dp[i][j-1] + 1;
            }
            if (map[i][j] == 'T' || map[i][j] == 't') {
                dp[i][j]++;
            }
        }
    }   
}
int main() {
    int n,m,time;
    while (cin >> n >> m >> time) {
        memset(map,0,sizeof(map));
        setmap(map,n,m);
        if (map[0][0]=='T'|| map[0][0]=='t'|| map[0][0]=='W'||map[0][0]
                =='w' || map[n-1][m-1] == 'T' || map[n-1][m-1] == 't'
                 || map[n-1][m-1] == 'W' || map[n-1][m-1] == 'w') {
            cout << "Oh my god!" << endl;
        }
        else {
            flag = 0;
            //cout << map[0][0] << endl;
            dfs(0,0,n,m,time);
            if (dp[n-1][m-1] <= time && flag == 1) {
                cout << dp[n-1][m-1] << endl;
            } 
            else {
                cout << "Oh my god!" << endl;
            }
        }
    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、實(shí)驗(yàn)?zāi)康?學(xué)習(xí)使用 weka 中的常用分類器,完成數(shù)據(jù)分類任務(wù)。 二、實(shí)驗(yàn)內(nèi)容 了解 weka 中 explo...
    yigoh閱讀 8,827評(píng)論 5 4
  • 這個(gè)不錯(cuò)分享給大家,從扣上看到的,就轉(zhuǎn)過來了 《電腦專業(yè)英語》 file [fail] n. 文件;v. 保存文...
    麥子先生R閱讀 7,095評(píng)論 5 24
  • 圓珠筆畫,老虎顏色不太多,所以需要的顏色圓珠筆色號(hào)恰巧都有! 家里有四只小喵,今天畫一只大喵! 圖下為大喵! 1....
    大王wxd閱讀 820評(píng)論 5 9
  • 小程序API初探1.后端由koa2搭建 API 發(fā)起請(qǐng)求
    離子來了閱讀 290評(píng)論 0 0

友情鏈接更多精彩內(nèi)容