杭電1728逃離迷宮解法二 BFS 搜尋

2021-07-31 17:51:54 字數 1029 閱讀 1735

特別注意:走過的點絕不可以標記,原因:如圖三點1,2,3,假設1轉彎數為5方向向下,2的轉彎數為6方向向右,假設此時點2在隊頭,點2先搜到點3,如果把3標記,點3的轉彎數為6,點1不能搜到點3,導致點3的轉彎數不是最小。

#include#includeusing namespace std;

const int m=100+30;

const int int=1000;

char map[m][m]; //地圖

int vis[m][m]; //儲存每乙個點的最少轉彎數

int nn[4][2]=; //方向向量:左,上,右,下

bool outside(int h,int z,int n,int m) //判斷是否出界

struct node

;int main()

}for(i=1;i<110;i++) //初始化每個節點的轉彎數為乙個很相當大的值

}struct node temp;

int step,a,b;

cin>>step>>temp.d>>temp.c>>b>>a; //此題很炕人,必須注意座標的輸入循序為:y1,x1,y2,x2

temp.direction=-1; //a(temp.c,temp.d)->b(a,b)

temp.step=0;

vis[temp.c][temp.d]=temp.step;

q.push(temp);

int h,z;

int foat=0;

while(!q.empty())

else //同向

if(temp.c==a&&temp.d==b&&step>=temp.step)//滿足條件跳出迴圈

if(vis[temp.c][temp.d]>=temp.step)//若當前點的轉彎數小於等於原來的轉彎數,}}

if(foat) break;

q.pop();

}if(foat)

cout<<"yes"<

hdu 杭電 1728 逃離迷宮

題意 m n m行,n列 的迷宮,給你兩個座標a x1,y1 b x2,y2 從a b轉過的最少彎數是否滿足條件 滿足輸出 yes 否輸出 no 解法 廣搜,特別注意 走過的點絕不可以標記,原因 很多人說用優先佇列,但這題只要你標記了即使用優先佇列還是不行,原因 假設1轉彎數為5方向向右,2的轉彎數...

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...