POJ 3669 简单BFS
2016-09-28 13:44
330 查看
标号 搜 完了……
//By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,t,xx[]={1,-1,0,0,0},yy[]={0,0,1,-1,0},map[666][666],vis[666][555]; struct Node{int x,y,t;}node[100050],jy; queue<Node>q; bool check(int x,int y){ return x>=0&&y>=0&&x<=600&&y<=600; } int main(){ memset(map,-1,sizeof(map)); scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d%d",&node[i].x,&node[i].y,&node[i].t); for(int j=0;j<=4;j++){ int x=node[i].x,y=node[i].y; if(check(x+xx[j],y+yy[j])&&(map[x+xx[j]][y+yy[j]]==-1||(node[i].t<map[x+xx[j]][y+yy[j]]&&~map[x+xx[j]][y+yy[j]]))){ map[x+xx[j]][y+yy[j]]=node[i].t; } } } q.push(jy); while(!q.empty()){ Node top=q.front();q.pop(); for(int i=0;i<=3;i++){ int x=top.x,y=top.y; if(map[x][y]==-1&&(x||y)){printf("%d\n",top.t);return 0;} if(!vis[x+xx[i]][y+yy[i]]&&check(x+xx[i],y+yy[i])&&(top.t+1<map[x+xx[i]][y+yy[i]]||map[x+xx[i]][y+yy[i]]==-1)){ vis[x+xx[i]][y+yy[i]]=1; jy.x=x+xx[i];jy.y=y+yy[i];jy.t=top.t+1; q.push(jy); } } } puts("-1"); }
相关文章推荐
- POJ 3669 简单BFS
- 【POJ 3669 Meteor Shower】简单BFS
- poj 3669-Meteor Shower(简单bfs)
- poj 2251(简单BFS)
- poj 3414(简单bfs)
- poj 1562 简单的BFS搜索
- POJ Find The Multiple 简单BFS
- zoj 2050 || poj 1753 Flip Game(状态压缩 简单BFS)
- POJ 2251 BFS 简单
- poj 1252 Euro Efficiency 简单BFS
- POJ 3626 Mud Puddles(超简单BFS)
- poj 3669 Meteor Shower (bfs)
- POJ 3126-Prime Path 简单搜索 BFS
- POJ 3669Meteor Shower(传说中的流星雨 BFS)
- POJ 3669-Meteor Shower(BFS)
- poj 3626 Mud Puddles (简单BFS)
- poj 3126Prime Path(简单BFS)
- poj 3278 简单bfs
- 简单BFS POJ 3126 Prime Path
- poj 3626 简单bfs