POJ3669 Meteor Shower BFS
2012-03-19 23:58
281 查看
#include<iostream> #include<queue> using namespace std; #define MAXN 302 struct point{ int x,y; }; int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; int map[MAXN][MAXN]; bool visted[MAXN][MAXN]; int steps; void bfs() { queue<point> Q; point p1={0,0},p2; int i; int t=1,count1=0,count2=0;// count用来计算steps Q.push(p1); visted[0][0]=true; while(!Q.empty()) { if(count1>count2) steps++,count2=t-1; p1=Q.front(); Q.pop(); count1++; for(i=0;i<4;i++) { p2=p1; p2.x+=dir[i][0]; p2.y+=dir[i][1]; if(p2.x>=0&&p2.x<=MAXN-1&&p2.y>=0&&p2.y<=MAXN-1) { if(map[p2.x][p2.y]==0x7fffffff) { steps++;return; } if(visted[p2.x][p2.y]==false&&steps+1<map[p2.x][p2.y]) {visted[p2.x][p2.y]=true;Q.push(p2);t++;} } } } steps=-1; } int main() { int i,j,m; cin>>m; for(i=0;i<MAXN;i++) for(j=0;j<MAXN;j++) map[i][j]=0x7fffffff,visted[i][j]=false; for(i=0;i<m;i++) { int x,y,t; scanf("%d %d %d",&x,&y,&t); if(map[x][y]>t)map[x][y]=t; if(map[x+1][y]>t)map[x+1][y]=t; if(map[x][y+1]>t)map[x][y+1]=t; if(x-1>=0&&map[x-1][y]>t)map[x-1][y]=t; if(y-1>=0&&map[x][y-1]>t)map[x][y-1]=t; } steps=0; if(map[0][0]!=0x7fffffff) bfs(); cout<<steps<<endl; return 0; }
搜索,第一题;
相关文章推荐
- poj3669 Meteor Shower bfs
- BZOJ_1611_[Usaco2008_Feb]_Meteor_Shower流星雨_(bfs)
- POJ Meteor Shower(BFS)
- Meteor Shower POJ - 3669-BFS
- POJ-3669 Meteor Shower BFS
- Meteor Shower POJ - 3669
- poj3669 Meteor Shower BFS
- POJ3669 Meteor Shower 【BFS】
- (BFS)poj3669-Meteor Shower
- POJ3669-Meteor Shower(BFS)
- poj3669 Meteor Shower(bfs java)
- POJ3669(BFS,障碍关联时间)
- POJ3669——BFS经典
- poj3669 bfs
- 刷题——Meteor Shower POJ - 3669
- POJ3669(meteor shower, BFS)TLE
- POJ3669-Meteor Shower-BFS
- 刷题——Meteor Shower POJ - 3669
- poj3669 之bfs解法
- Meteor Shower POJ - 3669