当前位置: 首页 > news >正文

广搜最短路(最短时间到达目的地),POJ(3669)

题目链接:http://poj.org/problem?id=3669

解题报告:

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

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

 

#include <stdio.h>
#include <memory.h>
#include <queue>
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;    ///节点结构,用于bfs

int max(int a, int b)
{
    return a > b ? a : b;
}

int bfs()
{
    memset(visited, false, sizeof(visited));

    queue<Node> 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

相关文章:

  • 06章 初始继承和多态
  • Paragon NTFS for Mac® Yosemite - 免费下载
  • 全栈工程师的未来发展如何?
  • Linux内核分析8
  • CentOS 7.x设置自定义开机启动,添加自定义系统服务
  • linux中萌翻了的cowsay命令
  • UVA 10129 Play on Words (欧拉通路)
  • 数据库 -- SQL 和 NoSQL 的区别
  • 进度条(第七周)
  • JAVA中十四种常见开发工具及其特点
  • spring Thymeleaf 中文乱码 (转)
  • BZOJ4380: [POI2015]Myjnie
  • iOS开发经验总结
  • 人机交互——对搜狗输入法的评价
  • cocos2d-x-3.0 的改变,由于变得太多,一点点累积吧!
  • Computed property XXX was assigned to but it has no setter
  • git 常用命令
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • 百度地图API标注+时间轴组件
  • 程序员该如何有效的找工作?
  • 给第三方使用接口的 URL 签名实现
  • 前言-如何学习区块链
  • 删除表内多余的重复数据
  • 正则学习笔记
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #1015 : KMP算法
  • #数学建模# 线性规划问题的Matlab求解
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (10)STL算法之搜索(二) 二分查找
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (南京观海微电子)——I3C协议介绍
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (学习日记)2024.01.19
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转) ns2/nam与nam实现相关的文件
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • ******之网络***——物理***
  • .net 7 上传文件踩坑
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET MVC第三章、三种传值方式
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET 指南:抽象化实现的基类
  • .NET命令行(CLI)常用命令
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [AIGC] 如何建立和优化你的工作流?
  • [Android]Tool-Systrace
  • [C++]四种方式求解最大子序列求和问题
  • [CCIE历程]CCIE # 20604