haut 1280 詭異的迷宮 多次bfs

2021-08-05 19:46:52 字數 1749 閱讀 2202

題目鏈結

題目描述

******最近刷題(打遊戲)刷多了,一覺醒來發現自己到了乙個迷宮裡,怎麼也出不去了。這時傳來了一句話,告訴******必須按順序收集完所有的寶石,才能出迷宮。所謂的順序,就是按照每塊寶石上英文本母的順序。迷宮裡面還有一些傳送門,可以傳送到任意乙個另外的傳送門的位置。(你走到乙個不是空地上的地方的時候,就一定會觸發相應事件,不可拒絕,從乙個傳送門傳送到另乙個傳送門不用再次傳送)。每走一步花費乙個單位時間,傳送門到另外乙個傳送門不需要時間。******初始就在字母為a的寶石的位置上(開局一寶石,其他全靠找)。

當******收集完所有寶石的時候就被傳送出迷宮。

******還要趕回去刷題(打遊戲),你們能告訴他最少需要多長時間才能回去嗎?如果不可能出去就輸出impossible。

輸入多組例項,每組輸入乙個n,表示迷宮的大小為n*n (n <= 10)

下面n行每行n個字元

『.』表示空地,

『#』表示牆,不可以通過

『$』表示乙個傳送門

大寫字母表示寶石

輸出每個例項輸出乙個數字,表示最少需要的時間,如果不能逃出迷宮,就輸出impossible。

樣例輸入

5 a….

...b..

.####

c.de.

2 ac

.b2

a#3 a.

….b

樣例輸出

15 3

impossible

2我是用多次的bfs過得,就是先找到b這個寶石,在從b的位置開始bfs,再找下乙個寶石,直到找到最後乙個寶石,注意已經找到寶石的位置要變為空地(因為這裡錯了好幾次),遇到不是當前要找的寶石要當做牆來處理

完整**如下:

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int max_n = 15;

char map[max_n][max_n];

bool used[max_n][max_n];

const

int xx = ;

const

int yy = ;

int n;

struct nodees,be,fi[110];

int top_fi;

char max_ch;

node bfs(node s,char ch)

node nx;

for(int i=0;i<4;i++)}}

if(map[nx.x][nx.y] == '.' || map[nx.x][nx.y] == (ch + 1))}}

return node;

}int main(void)

if(map[i][j] == 'a')

}char ch = 'a';

int res = 0;

node ti = be;

while(ch != max_ch)

else

}if(ch == max_ch)

printf("%d\n",res);

else

printf("impossible\n");

}return

0;}

HAUTOJ 1280 詭異的迷宮

時間限制 2 秒 記憶體限制 128 mb 提交 167 解決 24 題目描述 最近刷題 打遊戲 刷多了,一覺醒來發現自己到了乙個迷宮裡,怎麼也出不去了。這時傳來了一句話,告訴 必須按順序收集完所有的寶石,才能出迷宮。所謂的順序,就是按照每塊寶石上英文本母的順序。迷宮裡面還有一些傳送門,可以傳送到任...

詭異的電梯

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 新的宿舍樓有 n 1 n 100000 層and m 1 m 100000 個學生.在新的宿舍樓裡 為了節約學生的時間也為了鼓勵學生鍛鍊身體 所以規定該宿舍樓裡的電梯在相鄰的兩層之間是不會連續停下 即,如果在第2層停下就不能在第...

詭異的日子

跟u3打交道的日子,你永遠無法體會到他的詭異。本週的最後一天,在結束了一上午的工作,準備下午再搞它一下的時候。美術提了乙個需求 不慎調錯了地形的兩層,土和草地,土在上,草地在下,而且就這樣已經刷了一周了,希望我們能把它們給換過來,換成土在下,草地在上。看到介面上有 保留alpha 的選項,直接就很放...