逃離迷宮(bfs 判斷轉方向的次數)

2021-08-22 07:23:01 字數 1472 閱讀 3572

給定乙個m × n (m行, n列)的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,gloria是個沒什麼方向感的人,因此,她在行走過程中,不能轉太多彎了,否則她會暈倒的。我們假定給定的兩個位置都是空地,初始時,gloria所面向的方向未定,她可以選擇4個方向的任何乙個出發,而不算成一次轉彎。gloria能從乙個位置走到另外乙個位置嗎?

第1行為乙個整數t (1 ≤ t ≤ 100),表示測試資料的個數,接下來為t組測試資料,每組測試資料中,

第1行為兩個整數m, n (1 ≤ m, n ≤ 100),分別表示迷宮的行數和列數,接下來m行,每行包括n個字元,其中字元』.』表示該位置為空地,字元』*』表示該位置為障礙,輸入資料中只有這兩種字元,每組測試資料的最後一行為5個整數k, x 1, y 1, x 2, y 2 (1 ≤ k ≤ 10, 1 ≤ x 1, x 2 ≤ n, 1 ≤ y 1, y 2 ≤ m),其中k表示gloria最多能轉的彎數,(x 1, y 1), (x 2, y 2)表示兩個位置,其中x 1,x 2對應列,y 1, y 2對應行。

每組測試資料對應為一行,若gloria能從乙個位置走到另外乙個位置,輸出「yes」,否則輸出「no」。

2 5 5

…**

.*.

…..

…..

*….

1 1 1 1 3

5 5

…**

.*.

…..

…..

*….

2 1 1 1 3

no yes

從(y1,x1)到(y2,x2)的轉彎次數,如果大於k,就輸出no,否則輸出yes;

bfs廣搜,但是判斷的條件不再是最小步數,轉化成轉彎次數最小。所以就是多加乙個迴圈,如果方向不同就跳出迴圈並加1,但是乙個注意點就是就是我定義了乙個佇列,放在bfs裡面就ac了,放在外面就w了。所以如果要在while裡面,就要注意這個佇列是不是空的,不是空的要先變成空。

#include#include#include#include#include#include#define maxn 100000

using namespace std;

struct node

;node start,nextt;

int n,m,t,k,a1,b1,a2,b2;

int vis[105][105],dir[4][2]=,,,};

char map[105][105];

bool cmp(int xx,int yy)

void bfs()

cin>>k>>b1>>a1>>b2>>a2;

memset(vis,0,sizeof(vis));

bfs();

}}

逃離迷宮(BFS)

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

逃離迷宮(bfs)

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

hdu 逃離迷宮 BFS

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