poj3669这道题我看了好像两三天的样子_(:з」∠)_,迷之TLE,迷之MLE,迷之WA_(:з」∠)_.后来发现,问题有点儿多.一共三个问题,
一是读入流星的时候,没有考虑前面流星对后面流星的影响.
二是:小主人公可以跑到300*300的格子外面.
三是:走路的时候,忘了判断路是否已经走过_(:з」∠)_.
#include<iostream>
#include <cstdio>
#include <queue>
using namespace std;
typedef pair<int,int> P;
const int INF=20000;
int M;
int point[310][310];
int time[310][310];
int dx[]={0,0,-1,1,0};
int dy[]={-1,1,0,0,0};
queue<P> que;
int bfs(int x,int y){
que.push(P(x,y));
while(que.size()){
P p=que.front(); que.pop();
if(point[p.first][p.second]==INF) {
return time[p.first][p.second];}
for(int i=0;i<4;i++){
int nx=p.first+dx[i]; int ny=p.second+dy[i];
if(nx>=0&&ny>=0&&time[p.first][p.second]<point[nx][ny]-1&&time[nx][ny]==0){
que.push(P(nx,ny));
time[nx][ny]=time[p.first][p.second]+1;
}
}
}
return -1;
}
int main()
{
for(int i=0;i<310;i++){
for(int j=0;j<310;j++){
point[i][j]=INF;
}
}
scanf("%d",&M);
for(int i=0;i<M;i++){
int x,y,t;
scanf("%d %d %d",&x,&y,&t);
for(int j=0;j<5;++j){
int nx=x+dx[j]; int ny=y+dy[j];
if(nx>=0&&ny>=0&&point[nx][ny]>t){
point[nx][ny]=t;
}
}
}
int a=bfs(0,0);
cout<<a<<endl;
}