这是一道很好的搜索题。
既然是最大时间与最小时间的差,所以可以先用BFS
求出最少时间;再用DFS
求出最大时间(但注意要剪枝,不然会超时)。
话不多说,进入正题。
既然可以有四个方向可以走,那么我们可以定义两个方向增量数组,一个记录X,一个记录Y。
像这样:
int dx[5]={
1,-1,0,0},
dy[5]={
0,0,1,-1};
BFS
:定义一个队列,分别存X,Y和最小步数。
DFS
:用两个量,一个记录行,一个记录列。
更多解释详见代码中的注释。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;//头文件,不必多说。
struct Node {
int x;
int y;
int step;
}queue[10010];//队列。
int dx[5]={
1,-1,0,0},
dy[5]={
0,0,1,-1};//方向数组
bool a[1100][1100],vis[1100