HDU1728 逃離迷宮 DFS練習題

2021-08-04 21:03:28 字數 596 閱讀 8869

這道題其實單純使用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...