Hdu 5336 XYZ and Drops (bfs 模拟)

题目链接:

  Hdu 5336 XYZ and Drops

题目描述:

  有一个n*m的格子矩阵,在一些小格子里面可能会有一些水珠,每个小水珠都有一个size。现在呢,游戏开始咯,在一个指定的空的小格子里面有一个将要向四周爆裂的水珠,在下一面分别向上,下,左,右四个方向发射一个小水滴,(小水滴与水珠同,小水滴没有size),当小水滴走向一个格子,这个格子如果是空或者有其他的小水滴同时走到这个格子的情况下,对小水滴的运动轨迹是不影响的。但是遇到水珠的话,小水滴就会被吸收,水珠每次吸收一个小水滴size会增加1。为了万物的平衡,水珠size大于4的话就会向四周爆裂成为小水滴。问T时间后每个水珠的状态。

解题思路:

  就是bfs模拟一下小水滴运动的状态就ok了,比赛的时候一直卡题意。

  1 #include <queue>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <iostream>
  5 #include <algorithm>
  6 using namespace std;
  7 const int maxn = 110;
  8 int dir[4][2] = {1,0, -1,0, 0,1, 0,-1};
  9 struct node
 10 {//坐标,运动方向,运动时间
 11     int x, y, dir, t;
 12 };
 13 int maps[2][maxn][maxn], point[maxn][2];
 14 int r, c, x, y, t;
 15 
 16 void bfs ()
 17 {
 18     queue <node> Q;
 19     node p, q;
 20     p.x = x;
 21     p.y = y;
 22     p.dir = 4;
 23     p.t = 0;
 24     Q.push (p);
 25     while (!Q.empty())
 26     {
 27         p = Q.front ();
 28         Q.pop ();
 29         if (p.t >= t)
 30             return ;
 31         if (p.dir == 4)
 32         {
 33             for (int i=0; i<4; i++)
 34             {
 35                 q.x = p.x + dir[i][0];
 36                 q.y = p.y + dir[i][1];
 37                 q.dir = i;
 38                 q.t = p.t + 1;
 39                 if (0>=q.x||q.x>r || 0>=q.y||q.y>c)
 40                     continue;
 41                 if (maps[1][q.x][q.y] == q.t)
 42                     continue;
 43                 if ( !maps[0][q.x][q.y] )
 44                     Q.push (q);
 45                 else
 46                 {
 47                     maps[0][q.x][q.y] ++;
 48                     if (maps[0][q.x][q.y] > 4)
 49                     {
 50                         maps[1][q.x][q.y] = q.t;
 51                         maps[0][q.x][q.y] = 0;
 52                         q.dir = 4;
 53                         Q.push (q);
 54                     }
 55                 }
 56             }
 57         }
 58         else
 59         {
 60             q.x = p.x + dir[p.dir][0];
 61             q.y = p.y + dir[p.dir][1];
 62             q.dir = p.dir;
 63             q.t = p.t + 1;
 64              if (0>=q.x||q.x>r || 0>=q.y||q.y>c)
 65                     continue;
 66              if (maps[1][q.x][q.y] == q.t)
 67                     continue;
 68              if ( !maps[0][q.x][q.y] )
 69                     Q.push (q);
 70                 else
 71                 {
 72                     maps[0][q.x][q.y] ++;
 73                     if (maps[0][q.x][q.y] > 4)
 74                     {
 75                         maps[1][q.x][q.y] = q.t;
 76                         maps[0][q.x][q.y] = 0;
 77                         q.dir = 4;
 78                         Q.push (q);
 79                     }
 80                 }
 81         }
 82 
 83     }
 84 }
 85 int main ()
 86 {
 87     int n, s;
 88     while (scanf ("%d %d %d %d", &r, &c, &n, &t) != EOF)
 89     {
 90         memset (maps, 0, sizeof(maps));
 91         for (int i=0; i<n; i++)
 92         {
 93             scanf ("%d %d %d", &x, &y, &s);
 94             point[i][0] = x;
 95             point[i][1] = y;
 96             maps[0][x][y] = s;
 97         }
 98         scanf ("%d %d", &x, &y);
 99         bfs ();
100         for (int i=0; i<n; i++)
101         {
102             x = point[i][0];
103             y = point[i][1];
104             if (maps[0][x][y] == 0)
105                 printf ("0 %d\n", maps[1][x][y]);
106             else
107                 printf ("1 %d\n", maps[0][x][y]);
108         }
109     }
110     return 0;
111 }

 

转载于:https://www.cnblogs.com/alihenaixiao/p/4690592.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值