這道題其實單純使用dfs實現並不難,在函式裡面加乙個轉彎次數的形參就行。剛拿到這道題我確實也是這麼做的。
但是把**提交之後出現了dfs很常見的問題——超時,後來在討論區發現大部門ac的**都是使用的bfs+優先佇列,因為dfs都寫出來了就不想改了,再說也有用dfs成功ac的呀。看了大牛的**知道加乙個陣列進行剪剪枝就行。
#include #include #include using namespace std;
int to[4][2]=;
char map[105][105];
int turn[105][105];
int sx,sy,ex,ey,swerve,nowtime;
bool endn=false;
int m,n;
void dfs(int x,int y,int flag)
if(endn) return;
//cout<>t;
while(t--)
//cout<>swerve>>sy>>sx>>ey>>ex;
turn[sx][sy]=0;
dfs(sx,sy,0);
if(endn) cout<<"yes"<
HDU1728逃離迷宮(dfs 剪枝)
解題思路 一開始覺得是深搜模板題也沒多想,結果wa,發現輸入的出發點和終點都是先列再行 坑 改了下,又wa。起初的book陣列我用來存結點是否走過,原來這裡出bug了,題意是讓我們找結點是否能在k次轉彎內抵達。這裡存在著可能這個結點上次搜超過k次了,但是我們把他標記走過,等到下次經過這卻沒超過k次,...
hdu 1728 逃離迷宮
思路 一開始我是往左和往右走,不轉彎,計數不用加,往上和往下走,就轉彎,計數就加一,進行廣搜,搜到最後那個點,比較就可以啦,但是華麗麗的wa啦。所以改一條路搜到底,走不了啦,就一定要轉彎啦。include include include includeusing namespace std stru...
HDU 1728 逃離迷宮
bfs 搞清楚是轉彎而不是步數。所以需要乙個方向一直走下去直到邊界或者牆。還有就是注意題意。給出起點終點的 x,y 位置是交換的。題目是下標1開始。注意。include include include include include include include include include i...