HDU1728 逃离迷宫 DFS

HDU1728逃离迷宫

/*DFS +步长减枝
78MS	1600K
*/
#include 
#include 
#include //pair<>
#include 
using namespace std;
const int MAX=1e2+5;
const int INF=0x3f3f3f3f;//无限大
char m[MAX][MAX];//记录地图
bool flag,vis[MAX][MAX];
int Max,M,N;//记录地图长度和最大转向
int nxt[4][2]={1,0,-1,0,0,1,0,-1};//移动
int cut[MAX][MAX];//步长剪枝
pairs,e;
void DFS(int x,int y,int step,int r)
{
    if (flag||step>Max) return;
    if (x==e.first&&y==e.second)
    {
        flag=1;
        return;
    }
    for (int k=0;k<4;k++)
    {
        int tx=x,ty=y;
        tx+=nxt[k][0];
        ty+=nxt[k][1];
        if (tx<1||ty<1||tx>M||ty>N||vis[tx][ty]||m[tx][ty]=='*') continue;
        int Stp=step;
        if (k!=r) Stp++;
        if (cut[tx][ty]

你可能感兴趣的:(DFS)