逃離迷宮 DFS BFS HDU1728

2021-09-19 12:31:59 字數 2091 閱讀 7702

hdu1728

for

(int i =

0;i <

4;i++

) nx +

= dx[i]

; ny +

= dy[i];}

}

一開始寫的時候把上面的**寫錯了,沒有搜尋全部的狀態

錯誤**

for

(int i =

0;i <

4;i++)}

}

ac碼

#include

#include

using namespace std;

struct node };

char maze[

105]

[105];

int record[

105]

[105];

int vis[

105]

[105];

int dx=

;int dy=

;int k, sx, sy, gx, gy, m, n;

void

bfs(

)break;}

for(

int i =

0; i <

4; i++

) nx +

= dx[i]

; ny +

= dy[i];}

}}if(flag ==-1

)cout <<

"no"

<< endl;

}int

main()

return0;

}

dfs做法應該是比bfs更容易想到的做法。其思路主要是,搜尋從起點到迷宮上任意可行點的路徑,並記錄從起點到每個可行點的最少轉彎次數。

首先把dfs的整體框架寫出來

void

dfs(

int x,

int y,

int d)

for(

int i =

0; i <

4; i ++)if

(flag ==1)

return

;// 已經找到符合條件的路徑

}}

整體的框架就完成了,接下來是分析如何記錄最小的轉彎次數

if

(turn[nx]

[ny]

< turn[x]

[y])

continue

;// 已經存在更小轉彎次數

if(i != d)

else

turn[nx]

[ny]

= turn[x]

[y];

ac碼

#include

using namespace std;

int k, sx, sy, gx, gy, flag, m, n;

char maze[

105]

[105];

int turn[

105]

[105];

int dx=

;int dy=

;void

dfs(

int x,

int y,

int d)

if(turn[x]

[y]> k)

return

;// 剪枝

for(

int i =

0; i <

4; i++

)else

turn[nx]

[ny]

= turn[x]

[y];

dfs(nx, ny, i);if

(flag ==1)

return;}

}return;}

intmain()

return0;

}

dfs bfs 逃離迷宮

給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...

A 逃離迷宮 DFS

給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...

逃離迷宮6

小hi被壞女巫抓進裡一間有n x n個格仔組成的矩陣迷宮。有些格仔是小hi可以經過的,我們用 表示 有些格仔上有障礙物小hi不能經過,我們用 表示。小hi的起始位置在左上角,他需要到達右下角的格仔才能逃離迷宮。小hi每一步可以移動到上下左右四個方向相鄰的格仔上,前提是目標格式必須是沒有障礙的。現在小...