迷宫问题。
这类问题接触的少,但仔细审题就能看出要用dfs。欢天喜地写出代码,结果超时了。
百度了一下,惊讶的发现差了从没听过的奇偶剪枝操作。
代码有借鉴的地方。
#include<iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int n,m,t;
char maze[8][8];
int v[8][8];
int d[4][2]={-1,0,1,0,0,-1,0,1};
int b_x,b_y,e_x,e_y;
bool dfs(int r,int c,int s)
{
int x,y;
if(r==e_x&&c==e_y&&s==t)
return true;
if(s>=t)return false;
int temp=t-s-abs(r-e_x)-abs(c-e_y);
if (temp<0 || temp%2!=0)return false;
for(int i = 0; i < 4; i++)
{
x = r + d[i][0];
y = c + d[i][1];
//出界了
if(x<0||x>=n||y<0||y>=m)
continue;
//此路不通
if(maze[x][y]=='X')continue;
//该位置已经走过了。。
if(v[x][y]==1)continue;
v[x][y] = 1;
if(dfs(x,y,s+1))retu