POJ-3669
来源:互联网 发布:淘宝开放平台 什么 编辑:程序博客网 时间:2024/06/04 18:54
代码:
#include<cstdio>#include<iostream>#include<queue>#include<cstring>#include<algorithm>using namespace std;typedef pair<int,int> P;#define INF 0x3f3f3f3fint m;int x[50001],y[50001],t[50001];int maze[501][501];int d[501][501];///这样定义数组不太好呀int dx[4]={-1,1,0,0};int dy[4]={0,0,-1,1};///分别是上下左右四个方向int bfs(){ if(maze[0][0]==0)///一开始就被砸 return -1; queue<P> que;///大写的P(p)比较小 que.push(P(0,0)); d[0][0]=0; while(!que.empty()) { P p=que.front();///取出队首元素 que.pop(); int x=p.first,y=p.second; if(maze[x][y]==INF)///这里的maze是已经初始化好的 return d[x][y];///所以如果这里的maze[x][y]还是INF的话那就代表了这块地方是安全的 for(int i=0;i<4;i++)///经典的思路和代码流程 { int nx=x+dx[i],ny=y+dy[i];///为啥不限制上界呢 if(d[nx][ny]==INF&&d[x][y]+1<maze[nx][ny]&&nx<=301&&ny<=301&&nx>=0&&ny>=0) { que.push(P(nx,ny)); d[nx][ny]=d[x][y]+1; } } } return -1;}void solve(){ memset(maze,INF,sizeof(maze));///这个INF代表了流星砸到的时间是INF,就是永远也砸不到呀 memset(d,INF,sizeof(d)); for(int i=0;i<m;i++)///自己动手把迷宫构建出来 { maze[x[i]][y[i]]=min(maze[x[i]][y[i]],t[i]); for(int j=0;j<4;j++) { int nx=x[i]+dx[j],ny=y[i]+dy[j]; if(nx<=301&&ny<=301&&nx>=0&&ny>=0)///把上下界都限制住肯定错不了 maze[nx][ny]=min(maze[nx][ny],t[i]); } } int ans=bfs(); cout<<ans<<endl;}int main()///层次很鲜明呀{ ios::sync_with_stdio(false);///必加 cin>>m; for(int i=0;i<m;i++) cin>>x[i]>>y[i]>>t[i]; solve(); return 0;}
自己手动创建迷宫,真心强,反正我是想不到这么写;一开始我还想着先把所有所有流星砸到的地方都在maze数组里面记录一下就行了,再一看题,还有时间上的先后问题;后来又想每有一个流星砸过来的时候再对maze数组初始化,然后再bfs搜索一遍,再细想,这也太复杂了吧!
先把maze数组中的元素都初始化INF,代表流星永远都砸不到(真TM机智),然后再把流星最早砸到某个地方的时间记录到maze数组中以便用于后来时间上比较。真强!
阅读全文
0 0
- POJ 3669
- POJ-3669
- poj 3669
- poj-3669
- POJ 3669
- POJ 3669
- poj 3669
- 【POJ】3669
- POJ-3669
- POJ 3669 - Meteor Shower
- poj 3669搜索
- poj 3669 Meteor Shower
- poj 3669 Meteor Shower
- POJ-3669-Meteor Shower
- POJ 3669 BFS
- poj 3669 (BFS)
- POJ 3669 Meteor Shower
- poj 3669Meteor Shower
- android知识点链接(二)大多是网页的内容
- SLF4J: Class path contains multiple SLF4J bindings
- [jzoj]3479. 【NOIP2013模拟联考9】工作安排(work)
- 【Scikit-Learn 中文文档】数据集加载工具
- 设计模式-面向对象设计核心
- POJ-3669
- ssm开发使用redis作为缓存,使用步骤
- 1.2指令集体系结构分类
- Java中关于volatile关键字的一些总结
- 减少Android Studio应用项目体积的办法
- 【Scikit-Learn 中文文档】大规模计算的策略: 更大量的数据
- E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方案
- Mysql学习(一)
- 【Scikit-Learn 中文文档】预测延迟 / 预测吞吐量 / 技巧和窍门