problem description
給定乙個m × n (m行, n列)的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,gloria是個沒什麼方向感的人,因此,她在行走過程中,不能轉太多彎了,否則她會暈倒的。我們假定給定的兩個位置都是空地,初始時,gloria所面向的方向未定,她可以選擇4個方向的任何乙個出發,而不算成一次轉彎。gloria能從乙個位置走到另外乙個位置嗎?
input
第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,x2對應列,y
1, y
2對應行。
output
每組測試資料對應為一行,若gloria能從乙個位置走到另外乙個位置,輸出「yes」,否則輸出「no」。
sample input
25 5...***.**...........*....1 1 1 1 35 5...***.**...........*....2 1 1 1 3sample output
noyes思路分析:
這題就是要求在乙個圖中由某乙個點到達另乙個點的最小轉彎數,所以馬上想到可以用bfs解決,但是這一題並不是以往常見的bfs型別,這題需要的是從起點開始四個方向走到底,然後將所有點都入隊,然後再有這些點重複操作更新其他與其相關的點就可以了,需要注意的是有起點和重點重合的情況需要特判一下就行了,下面附上**:
#include#include#include#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
const int maxn=102;
typedef long long ll;
char a[maxn][maxn];
int point[maxn][maxn];
struct node
;queueq;
int m,n;
int dx[5]=;
int dy[5]=;
bool search(int x1,int y1,int c,int b,int k)//四個方向搜尋入隊。
); }
x=x+dx[i];
y=y+dy[i];
}} return false;
}int main()
q.push(node);//入隊。
point[x1][y1]=-1;
bool wang=false;
while(!q.empty())
}if(wang) printf("yes\n");
else printf("no\n");
while(!q.empty())q.pop();
}}
HDU1728 逃離迷宮 BFS
problem description 給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能...
hdu1728 逃離迷宮 bfs
解題思路 乙個方向搜到底,那麼每次搜過的點肯定都是用轉彎次數最少的路徑走到的 hdu1728 2014 07 10 20 03 49 accepted 1728 46ms 372k 2360 b g bfs 乙個方向搜到底,那麼每次搜過的點肯定都是用轉彎次數最少的路徑走到的 include incl...
HDU 1728 逃離迷宮 BFS
題目傳送門 典型的廣搜題,但是有坑,在某個方向走的時候要一直走到頭,不然的話可能會出現多轉彎的情況,主要就是保證從起始點到某一點的轉彎次數是最小的 ac include include include include include include include include include i...