求在方格图上从一点到达另一点的最短时间,有边界但是没有障碍,取而代之的是某些方格在一段时间内是不能走的
可能在某段时间会困在一个区域内,每个时间必须走一步,所以可以走回头路
不妨直接在二维平面图的基础上加上时间这个维度,进行三维的bfs搜索,但是时间每走一步都是+1
这样最先到达目标点依然是最快的时间
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int N=100+10;
const int M=100+10;
const int T=300+10; //最大可能的时间
const int dx[]={0,0,-1,1};
const int dy[]={-1,1,0,0};
struct node
{
int x,y,t;
node(int a,int b,int c)
{
x=a;y=b;t=c;
}
};
bool d[N][M][T];
int l[N][M],r[N][M];
int n,m,k;
int bfs()
{
queue<node> q;
q.push(node(1,1,0));
d[1][1][0]=true;
while(!q.empty())
{
node u=q.front();
q.pop();
int ux=u.x,uy=u.y,ut=u.t;
for(int i=0;i<4;i++)
{
int nx=ux+