幻想迷宮 DFS

2022-09-03 06:57:09 字數 2206 閱讀 1355

給出乙個迷宮,走到這個迷宮邊界時可以瞬移。求從

s' role="presentation" style="position: relative">s

s點開始,能否走到無限遠。 in

put' role="presentation" style="position: relative">inp

utinput

5

4##.#

##s#

#..#

#.##

#..#54

##.#

##s#

#..#

..#.

#.##

ou

tput

' role="presentation" style="position: relative">out

puto

utpu

t

yes

no

哇。。。這是我做過的最難得df

s' role="presentation" style="position: relative">dfs

dfs題目。。。

從5月開始做,陸陸續續地,今天終於做完了。。。

啊啊啊啊啊累死我了(今天攻了一整天這道題,終於過了。。。)

不愧是藍題。

共耗時:72天8時

這道題要我們求能否走到無限遠處,其實很容易想到,它就是要我們求能否從起點到達另乙個起點!(因為會瞬移)

**如果能從粉色的

s' role="presentation" style="position: relative">s

s走到黑色的

s' role="presentation" style="position: relative">s

s,那麼就肯定能從黑色的

s' role="presentation" style="position: relative">s

s走到棕色的

s' role="presentation" style="position: relative">s

s,那麼也能走到下乙個

s' role="presentation" style="position: relative">s

s。。。就能走到無限遠處。

那麼第一種思路肯定是開乙個9×

9' role="presentation" style="position: relative">9×9

9×9的矩陣(如上圖),一般來說,9×

9' role="presentation" style="position: relative">9×9

9×9就足夠我們存所有答案了。

但是如果遇到下面這組資料:

6

20#.##.##.##.##.##.##.

#.##.##.##.##.##.##.

#.##.##.##.##.##.##.

s.#..

#..#..

#..#..

#..##..

#..#..

#..#..

#..#

#..#..

#..#..

#..#..##

那就gg了。

那麼我們又不可能開更大了,所以就只能有一種方法:

重複使用乙個矩陣。

那麼就真正得順瞬移了。每當走出界時,就將它瞬移到對面的那個格仔。

那麼就有很多細節了。打**時一定要注意細節。

#include 

#include

#include

using

namespace

std;

const

int dx=;

const

int dy=;

int n,m,sx,sy;

int a[1511][1511],b[3011][3011],c[1511][1511];

char ch;

int dfs(int x,int y) //深搜

int main()

}if (dfs(sx,sy)) printf("yes\n");

else

printf("no\n");

}return

0;}

洛谷 1363 幻想迷宮

這是一道不是很難的搜尋題,我的第一反應是把矩陣擴大九倍,然後從中間子陣的起點做flood fill即可。於是,我加了四行 if nx n n 1 nx n n 1 if ny m m 1 ny m m 1 if nx 1 nx n n 1 if ny 1 ny m m 1 終於ac include ...

迷宮問題dfs

迷宮問題 棧作為深度優先遍歷 dfs 採用的搜尋方法的特點是盡可能先對縱深方向進行搜尋 可以最快的找到解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct sttype 迷宮問題常用...

DFS 遞迴 迷宮

這幾天都在看那本演算法書 啊哈!演算法 今天看到深度優先搜尋 dfs 總結了自己看得懂的使用模板.dfs的模板.public class main static void dfs else 1 主方法呼叫靜態方法dfs。2 dfs方法的步驟 1 先判斷目前是否滿足條件。2 滿足的話,就執行輸出結果的...