poj 3669 Meteor Shower
2013-12-11 20:02
357 查看
预处理地图,表示当前点爆炸的最早时间,然后bfs找到安全区域。
坑点:1.有可能一开始的0,0点就被炸了
2.安全区域不是0-300,0-300,而是0-正无穷,0-正无穷,所以边界判断只要x>=0&&y>=0就够了。
其他的没什么
坑点:1.有可能一开始的0,0点就被炸了
2.安全区域不是0-300,0-300,而是0-正无穷,0-正无穷,所以边界判断只要x>=0&&y>=0就够了。
其他的没什么
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; int maps[305][305]; //bool vis[305][305][1005]; int dx[]={0,0,-1,1,0}; int dy[]={-1,1,0,0,0}; struct node { int x,y; int t; }v[50005]; int top; int n; int times; int vis[305][305]; bool cmp(node a,node b) { return a.t<b.t; } bool isok(int x,int y) { return x>=0&&/*x<=300&&*/y>=0/*&&y<=300*/; } void bfs() { queue<node> Q; node t,f; t.x=0;t.y=0;t.t=0; memset(vis,0,sizeof(vis)); Q.push(t); while(!Q.empty()) { t=Q.front();Q.pop(); for(int d=0;d<4;d++) { f=t; f.x+=dx[d]; f.y+=dy[d]; f.t++; if(isok(f.x,f.y)&&maps[f.x][f.y]>f.t&&!vis[f.x][f.y]) { vis[f.x][f.y]=1; if(maps[f.x][f.y]>times) { printf("%d\n",f.t); return; } Q.push(f); } } } printf("-1\n"); } int main() { while(~scanf("%d",&n)) { memset(maps,0x3f,sizeof(maps)); top=0; for(int i=1;i<=n;i++) { scanf("%d%d%d",&v[top].x,&v[top].y,&v[top].t); top++; } sort(v,v+top,cmp); for(int i=0;i<top;i++) { for(int d=0;d<5;d++) { int nx=v[i].x+dx[d]; int ny=v[i].y+dy[d]; if(!isok(nx,ny)) continue; maps[nx][ny]=min(maps[nx][ny],v[i].t); } } times=v[top-1].t; if(maps[0][0]==0) puts("-1"); else bfs(); } return 0; }
相关文章推荐
- poj_3669_Meteor Shower(BFS+预处理)
- POJ - 3669 Meteor Shower (广搜+标记)
- Poj 3669 Meteor Shower【bfs】
- POJ 3669 Meteor Shower
- POJ 3669 Meteor Shower
- POJ 3669 Meteor Shower(BFS)
- POJ 3669 Meteor Shower
- Meteor Shower (POJ 3669,广度优先搜索)
- POJ 3669 Meteor Shower 挑战P135
- Meteor Shower(POJ-3669)
- POJ 3669 Meteor Shower
- POJ 3669:Meteor Shower 处处是坑的广搜
- poj 3669 meteor shower
- Poj-3669 Meteor Shower--Bfs经典例题
- Poj 3669 Meteor Shower
- POJ 3669 Meteor Shower(BFS)
- POJ 3669Meteor Shower(广搜)
- POJ 3669 Meteor Shower(BFS)
- BFS——Poj 3669 Meteor Shower
- 【POJ 3669】Meteor Shower