NOJ 網路賽 D題 天神小學

來源:互聯網
上載者:User

標籤:

題目:

天神小學時間限制(普通/Java) : 1000 MS/ 3000 MS          運行記憶體限制 : 65536 KByte
總提交 : 148            測試通過 : 53 

題目描述

《corpse party:blood drive》中有這麼一段,班長筱崎亞由美拿到六鬼門的晶石,導致了涅?的暴走,天小的崩潰,靠著幸子的力量才逃出了天小。(劇情什麼的不重要)

現在我們假設沒有幸子,班長需要靠自己的力量逃出天神小學。可以把天神小學看作是一個二維的迷宮,每一秒都只能從當前位置走到上下左右四個相鄰的格子裡,因為天小一直在崩潰,所以有很多點是無法行走的。問班長能不能在天小完全崩潰,即t秒內逃出天神小學。



輸入

第一行一個整數T,表示資料群組數

每組資料第一行輸入3個整數n,m,t分別表示迷宮的行數,列數,以及距離天小崩潰剩餘的時間。(3≤n,m≤20,t≤100)

接下來輸入n行,每行有一個長度為m的字串。

其中字元’.’表示可以通行

字元’*’表示無法通行

字元’O’表示出口

字元’X’表示班長的起始位置


輸出

若能逃離 輸出 "happy end"

否則輸出 "bad end"


範例輸入

2

5 5 13
.....
.***.
.*X*O
.*.*.
...*.

5 5 14
.....
.***.
.*X*O
.*.*.
...*.

範例輸出

bad end
happy end

題目來源

kojimai



題目分析:

             搜尋題。以下代碼能夠AC,但我不知道是否正確理解了出題人的意思,以下代碼僅供參考。用的是DFS來做。



代碼如下:

/* * a.cpp * *  Created on: 2015年2月24日 *      Author: Administrator */#include <iostream>#include <cstdio>using namespace std;const int maxn = 25;char map[maxn][maxn]; //地圖矩陣.用於儲存地圖的情況int n; //行數int m; //列數int t; //目標時間int x1, y1; //起點int x2, y2; //終點int dir[4][2] = { //方向矩陣{ 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };/** * 判斷下一步是否合法 */bool check(int x, int y) {if (x < 0 || x >= n || y < 0 || y >= m) { //如果座標越界return false; //則表明下一步不合法}return true; //否則下一步合法}/** * DFS。 * si:當前結點的行數 * sj:當前節點的列數 * cnt:到達(si,sj)是所用的時間 */bool dfs(int si, int sj, int cnt) {if (si == x2 && sj == y2 && cnt <= t) { //如果在指定時間內到達目標點return true; //返回true}int i;for (i = 0; i < 4; ++i) { //遍曆當前節點的相鄰結點int tempi = si + dir[i][0]; //計算下一節點的座標int tempj = sj + dir[i][1];if (check(tempi, tempj) == false) { //如果計算出來的下一屆點的座標不合法continue; //則跳過這一結點,計算下一結點}if (map[tempi][tempj] != ‘*‘) { //如果當前節點不是牆壁map[tempi][tempj] = ‘*‘; //江當前節點設定為牆壁bool flag = dfs(tempi, tempj, cnt + 1); //沿著這一節點往下搜if (flag == true) { //如果這一條路徑可行return true; //則返回true.表示目標節點可以到達}//當知心以下代碼的時候表示通過這一節點無法到達目標節點map[tempi][tempj] = ‘.‘; //拿獎當前節點重新設定成‘.‘可用狀態}}return false; //如果經過上面都無法找到一條路徑.那麼到現在的時候就已經表明目標節點無法到達}int main() {int ttt;scanf("%d", &ttt);while (ttt--) {scanf("%d%d%d", &n, &m, &t);int i;int j;for (i = 0; i < n; ++i) {cin >> map[i];}int wall = 0; //用於包村牆壁的數量for (i = 0; i < n; ++i) {for (j = 0; j < m; ++j) {if (map[i][j] == ‘X‘) { //記錄起點的位置x1 = i;y1 = j;} else if (map[i][j] == ‘O‘) { //記錄終點的位置x2 = i;y2 = j;} else if (map[i][j] == ‘*‘) { //統計牆壁的數量wall++;}}}map[x1][y1] = ‘*‘; //獎起點設定為牆壁‘x‘bool result = dfs(x1, y1, 0); //從起點開始遍曆if (result == true) { //如果resultweighttrue,表明有這麼一條路徑printf("happy end\n");} else {printf("bad end\n"); //否則表明沒有這樣一條路徑}}return 0;}







NOJ 網路賽 D題 天神小學

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.