HDU1728逃離迷宮(dfs 剪枝)

2021-08-15 22:26:48 字數 846 閱讀 8472

解題思路:一開始覺得是深搜模板題也沒多想,結果wa,發現輸入的出發點和終點都是先列再行(坑),改了下,又wa。起初的book陣列我用來存結點是否走過,原來這裡出bug了,題意是讓我們找結點是否能在k次轉彎內抵達。這裡存在著可能這個結點上次搜超過k次了,但是我們把他標記走過,等到下次經過這卻沒超過k次,由於上次標記,我們也把他篩掉。這顯然不正確,這是就改一下,book陣列存到達本點的最小轉彎數,就可以了。這種思路可以拓展到廣搜,用優先佇列,明天寫下。

ac**如下:

#include#include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

using namespace std;

char image[110][110];

int book[110][110],nex[4][2]=,n,m,k,flag,tx,ty;

bool judge(int x,int y)

void dfs(int x,int y,int bearing)

int a,b,i;

for(i=0;i<4;i++)

return ;

}int main()

cin>>k>>y>>x>>ty>>tx;

if(y==ty && x==tx)

flag=0;

book[x][y]=0;

for(i=0;i<4 && !flag;i++)

if(flag)

cout<<"yes"

cout<<"no"<} return 0;

}

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

HDU 1728 逃離迷宮

逃離迷宮 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中...