题目:
分析:与时间有关的变化图,没有任何的思路。只能想到暴力搜:
看题解,自己思维的错误点在于:即使有时间点的影响,也不可能重复到达其他的点。
代码:
#include<bits/stdc++.h>
using namespace std;
int A[605][605];
int D1[5]={0,-1,1,0,0};
int D2[5]={0,0,0,-1,1};
void f(int x,int y,int c)
{
if(x<0) return;
if(y<0) return;
if(A[x][y]==-1){
A[x][y]=c;return ;
}
A[x][y]=min(A[x][y],c);
}
int main()
{
memset(A,-1,sizeof(A));
int m;
cin>>m;
for(int i=0;i<m;i++)
{
int a,b,c;
cin>>a>>b>>c;
for(int j=0;j<5;j++) f(a+D1[j],b+D2[j],c);
}
int t=0;
pair<int,int> p;
p.first=0;
p.second=0;
queue<pair<int,int> > qp;
qp.push(p);
while(!qp.empty())
{
t++;
queue<pair<int,int> > qp2;
while(!qp.empty())
{
pair<int,int> p2=qp.front();
qp.pop();
for(int i=1;i<=4;i++)
{
int x=p2.first+D1[i];
int y=p2.second+D2[i];
if(x<0||y<0) continue;
if(A[x][y]==-2) continue;
if(A[x][y]!=-1 && A[x][y]<=t) continue;
if(A[x][y]==-1)
{
cout<<t;
exit(0);
}
A[x][y]=-2;
pair<int,int> p3;
p3.first=x;
p3.second=y;
qp2.push(p3);
}
}
qp=qp2;
}
cout<<-1;
}