此题难点在于剪枝。
奇偶性剪枝,起点到出发点偶数奇数,t为偶数奇数。决定了是否能成功到达。
abs(t-step-abs(x-z_x)-abs(y-z_y))%2==1
全部代码:
/*
#include<queue>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m,t,step,z_x,z_y;
int flag;
char trap[20][20];
int vis[20][20];
int add[4][2]={
{1,0},{0,1},{-1,0},{0,-1}};
void dfs(int x,int y,int step)
{
if (step==t&&y==z_y&&x==z_x){
flag=1;
return;
}else if(step>t||flag==1)
{
return;
}else if(abs(t-step-abs(x-z_x)-abs(y-z_y))%2==1)
{
return;
}else{
for(int i=0;i<4;i++)
{
int x1,y11;
x1=x+add[i][0];y11=y+add[i][1];
if(!vis[y11][x1]&&(trap[y11][x1]=='D'||trap[y11][x1]=='.'))
{
vis[y11][x1]=1;
dfs(x1,y11,step