Chinami_Nagisa @ 2024-08-14 14:12:47
样例已过,编译器可运行,但是CE
#include <iostream>
#include <queue>
#include <utility>
#include <vector>
using namespace std;
int M,T;
struct star
{
int x;
int y;
int t;
} a[10010];
vector<int> time[1010]; //某时间对应的火星是第几个
typedef pair<int,int> PII;
queue<PII> q;
int st[310][310];
int d[310][310];
PII curr;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
void bfs(int x0,int y0)
{
q.push({x0,y0});
st[x0][y0]=2;
while(!q.empty())
{
PII temp=q.front();
q.pop();
T=d[temp.first][temp.second]+1;
for(int j=0;j<time[T].size();j++) //标记下一个时刻烧焦和撞击的点
{
st[a[time[T][j]].x][a[time[T][j]].y]=2;
for(int k=0;k<4;k++)
if(a[time[T][j]].x+dx[k]>=0 && a[time[T][j]].y+dy[k]>=0)
st[a[time[T][j]].x+dx[k]][a[time[T][j]].y+dy[k]]=2;
}
for(int i=0;i<4;i++)
{
int x1=temp.first+dx[i];
int Y1=temp.second+dy[i];
if(x1<0||Y1<0) continue;
else if(st[x1][Y1]==2) continue;
else if(st[x1][Y1]==0) return;
else {
q.push({x1,Y1});
st[x1][Y1]=2;
d[x1][Y1]=d[temp.first][temp.second]+1;
}
}
}
T=-1;
return;
}
int main(){
cin>>M;
for(int i=1;i<=M;i++) //第i颗流星
{
cin>>a[i].x>>a[i].y>>a[i].t; //存流星信息
time[a[i].t].push_back(i); //第a[i].t时刻的流星i
for(int j=0;j<4;j++)
if(a[i].x+dx[j]>=0 && a[i].y+dy[j]>=0)
st[a[i].x+dx[j]][a[i].y+dy[j]]=1; //标记危险点
st[a[i].x][a[i].y]=1;
}
if(!st[0][0]) {cout<<0;return 0;}
bfs(0,0);
cout<<T;
return 0;
}
by YWHHDJSer @ 2024-08-14 14:44:27
起名字起重复了,vector<int> time[1010]
的time
在C++头文件里被用过了。
by YWHHDJSer @ 2024-08-14 14:46:51
口误了,是关键字。