鄙人不才,此中鄙陋甚多,望海涵!!!
这道题目显然是一道bfs题目,但由于有诸多限制条件,我们很难在二维地图上解决限制时间的问题,这里有一个黑科技,就是将二维图拓展到三维空间表示,其余的就是bfs模板了,详见代码!
C++Code
#include<iostream>
#include<queue>
using namespace std;
const int N=110,M=310;
bool st[N][N][M];
struct node
{
int r,c,time;
}start;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
int n,m,t,r,c,a,b;
int bfs()
{
start.r=1,start.c=1,start.time=0;
queue<node> q;
q.push(start);
while(q.size())
{
node t=q.front();
q.pop();
int x=t.r,y=t.c,ti=t.time;
if(x==n && y==m) return ti;
for(int i=0;i<4;i++)
{
int a=x+dx[i],b=y+dy[i],tim=ti+1;
if(a<1 || a>n || b<1 || b>m) continue;
if(st[a][b][tim]) continue;
st[a][b][tim]=true;
node tmp;
tmp={a,b,tim};
q.push(tmp);
}
}
}
int main()
{
cin>>n>>m>>t;
while(t--)
{
scanf("%d%d%d%d",&r,&c,&a,&b);
for(int i=a;i<=b;i++) st[r][c][i]=true;
}
cout<< bfs() <<endl;
return 0;
}
创作不易,如果您觉得对您有帮助,就点个赞支持一下!您的赞就是我持续更新优质题解的动力!