博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
广搜最短路(最短时间到达目的地),POJ(3669)
阅读量:6087 次
发布时间:2019-06-20

本文共 2400 字,大约阅读时间需要 8 分钟。

题目链接:

解题报告:

1、流星坠落的点,四周和自己本身都被毁灭,不断更新每个点被毁灭的时候的最短时间。

2、搜索终点是,到达某个点,这个不会有流星毁灭他,即他的毁灭的时间大于最后一个流星到达时的时间。

 

#include 
#include
#include
using namespace std;#define MAX 302 ///地图宽度int m; ///流星数int map[MAX][MAX]; ///地图bool visited[MAX][MAX]; ///是否访问过int last; ///最晚的流星时间int go[][2] ={
{
1,0},{-1,0},{
0,1},{
0,-1},{
0,0}}; ///五个方向struct Meteor{ int x; int y; int t;}meteor[50000]; ///流星结构typedef Meteor Node; ///节点结构,用于bfsint max(int a, int b){ return a > b ? a : b;}int bfs(){ memset(visited, false, sizeof(visited)); queue
q; ///队列 Node fir; ///起始点入队 fir.x = fir.y = fir.t = 0; visited[0][0] = true; q.push(fir); while (!q.empty()) ///bfs { Node now = q.front(); q.pop(); for (int i = 0; i < 4; i++) ///每次必须行动1格 { Node tmp = now; tmp.x += go[i][0]; tmp.y += go[i][1]; tmp.t++; if (tmp.x >= 0 && tmp.y >= 0 && map[tmp.x][tmp.y]>tmp.t && !visited[tmp.x][tmp.y]) ///没越界、流星还未砸这个格子、还没访问过(重复访问就是不是bfs最优解了) { visited[tmp.x][tmp.y] = true; ///标记 if (map[tmp.x][tmp.y] > last) ///如果格子不会被砸到 { return tmp.t; } q.push(tmp); } } } return -1;}int main(){ while (scanf("%d", &m) != EOF) { for (int i = 0; i < m; i++) { scanf("%d%d%d", &meteor[i].x, &meteor[i].y, &meteor[i].t); } memset(map, 0x7f, sizeof(map)); ///要严谨一点可以用0x7fffffff,不过就不能用memset了 for (int i = 0; i < m; i++) { ///计算最晚流星的时间 if (i == 0) last = meteor[i].t; else last = max(last, meteor[i].t); ///更新地图上某个点的最快的流星下落时间 for (int j = 0; j < 5; j++) { int tx = meteor[i].x + go[j][0]; int ty = meteor[i].y + go[j][1]; if (tx >= 0 && ty >= 0 && map[tx][ty]>meteor[i].t) { map[tx][ty] = meteor[i].t; } } } if (map[0][0] == 0) ///起始点被砸直接gg printf("-1\n"); else ///否则bfs printf("%d\n", bfs()); } return 0;}

 

转载于:https://www.cnblogs.com/TreeDream/p/5375004.html

你可能感兴趣的文章
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
第六周
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>