給出乙個迷宮,走到這個迷宮邊界時可以瞬移。求從
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 滿足的話,就執行輸出結果的...