特別注意:走過的點絕不可以標記,原因:如圖三點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...