2 5基本演算法之搜尋 2727 仙島求藥 廣搜

2021-08-02 06:51:10 字數 1365 閱讀 8955

描述

少年李逍遙的嬸嬸病了,王小虎介紹他去一趟仙靈島,向仙女姐姐要仙丹救嬸嬸。叛逆但孝順的李逍遙闖進了仙靈島,克服了千險萬難來到島的中心,發現仙藥擺在了迷陣的深處。迷陣由m×n個方格組成,有的方格內有可以瞬秒李逍遙的怪物,而有的方格內則是安全。現在李逍遙想盡快找到仙藥,顯然他應避開有怪物的方格,並經過最少的方格,而且那裡會有神秘人物等待著他。現在要求你來幫助他實現這個目標。

下圖 顯示了乙個迷陣的樣例及李逍遙找到仙藥的路線.

輸入輸入有多組測試資料. 每組測試資料以兩個非零整數 m 和 n 開始,兩者均不大於20。m 表示迷陣行數, n 表示迷陣列數。接下來有 m 行, 每行包含n個字元,不同字元分別代表不同含義:

1) 『@』:少年李逍遙所在的位置;

2) 『.』:可以安全通行的方格;

3) 『#』:有怪物的方格;

4) 『*』:仙藥所在位置。

當在一行中讀入的是兩個零時,表示輸入結束。

輸出對於每組測試資料,分別輸出一行,該行包含李逍遙找到仙藥需要穿過的最少的方格數目(計數包括初始位置的方塊)。如果他不可能找到仙藥, 則輸出 -1。

傳送門這道題就是典型的迷宮類問題,我這裡主要介紹廣度優先搜尋的方法,首先在輸入時確定起點,終點並標記怪物,然後從起點開始分別向上下左右走,走到哪個點就先判斷是否越界或已被標記,如可以前行就標記它併入隊(用兩個佇列實現),當第一次走到終點時結束並重置,具體見以下**和每乙個細節的注釋

基本演算法之搜尋 2727:仙島求藥 

#include#include#include#includeusing namespace std;

struct as;

queues;

int a,b,c,d,c1,c2,f1[5]=,f2[5]=;//f1,f2前一定要加0

bool f[30][30];

char xy[30][30];

void bfs()//廣搜

//到達終點

f[ml.x][ml.y]=1;//標記

s.push(ml);//子座標入隊

} s.pop();//原父座標退出

} printf("-1\n");

while(!s.empty())//佇列清空

s.pop();

}int main()

} as sc;

if(a==c&&b==d)

f[a][b]=1;//標記起點

sc.x=a,sc.y=b,sc.tot=0;//佇列初始化

s.push(sc);

bfs();

}}

2727 仙島求藥

總時間限制 1000ms 記憶體限制 65536kb 描述 少年李逍遙的嬸嬸病了,王小虎介紹他去一趟仙靈島,向仙女姐姐要仙丹救嬸嬸。叛逆但孝順的李逍遙闖進了仙靈島,克服了千險萬難來到島的中心,發現仙藥擺在了迷陣的深處。迷陣由m n個方格組成,有的方格內有可以瞬秒李逍遙的怪物,而有的方格內則是安全。現...

2727 仙島求藥 Openjudge

2727 仙島求藥 少年李逍遙的嬸嬸病了,王小虎介紹他去一趟仙靈島,向仙女姐姐要仙丹救嬸嬸。叛逆但孝順的李逍遙闖進了仙靈島,克服了千險萬難來到島的中心,發現仙藥擺在了迷陣的深處。迷陣由m n個方格組成,有的方格內有可以瞬秒李逍遙的怪物,而有的方格內則是安全。現在李逍遙想盡快找到仙藥,顯然他應避開有怪...

Python排序搜尋基本演算法 之拓撲排序

拓撲排序是對有向無環圖的一種排序,滿足如下兩個條件 1.每個頂點出現且只出現一次 2.若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。如上的無環有向圖,v表示頂點 v a b c d e e表示有向邊 e a b a d b c d c d e e c 如下 def indegree0 v,...