首页 > 其他分享 >HDU 1312 RED AND BLACK

HDU 1312 RED AND BLACK

时间:2024-07-09 11:42:05浏览次数:17  
标签:HDU 1312 int dd 位置 BLACK mp dir

题目链接:HDU 1312 【RED AND BLACK】



思路

       简单搜索,输入数据时,找出起点位置,然后从七点位置开始搜素能到达的所有位置并记录,使用check()函数判断当前位置可以走吗,可以走就把当前位置放入队列中,并将当前位置修改为非黑色位置,防止重复进入。


代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 30;

int n, m, startx, starty, dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
char mp[N][N];

void init() {
  startx = starty = 0;
  memset(mp, 0, sizeof mp);
}

// 判断当前位置是否合法
bool check(int x, int y) {
  if (x >= 1 && x <= n && y >= 1 && y <= m && mp[x][y] == '.')
    return true;
  else
    return false;
}

// 搜索所有结果
int bfs(int x, int y) {
  int countTitle = 1;

  // 初始化队列
  queue<pair<int, int>> q;
  q.push({x, y});

  while (!q.empty()) {
    // 取出栈顶数据
    pair<int, int> d = q.front();
    q.pop();
    // 判断栈顶元素四个方向是否可以走
    for (int i = 0; i < 4; i++) {
      pair<int, int> dd = d;
      dd.first += dir[i][0], dd.second += dir[i][1];
      // 当前方向可以走的时候,加入队列,并将当前节点标记为非黑色节点,防止重复走
      if (check(dd.first, dd.second) == true) {
        q.push(dd);
        mp[dd.first][dd.second] = '@';
        countTitle++;
      }
    }
  }
  return countTitle;
}

int main() {
  while (cin >> m >> n) {
    // 停止输入条件
    if (n == m && n == 0)
      break;
    // 初始化所有数据
    init();
    // 输入数据并找出起点
    for (int i = 1; i <= n; i++) {
      cin >> (mp[i] + 1);
      for (int j = 1; j <= m; j++) {
        if (mp[i][j] == '@') {
          startx = i, starty = j;
        }
      }
    }
    // 搜索并输出
    cout << bfs(startx, starty) << endl;
  }
  return 0;
}

标签:HDU,1312,int,dd,位置,BLACK,mp,dir
From: https://www.cnblogs.com/againss/p/18291453

相关文章

  • hdu物联网硬件实验1 小灯闪烁
    物联网硬件基础实验报告学院班级学号姓名日期成绩实验题目配置环境+小灯实验目的配置环境以及小灯闪烁硬件原理无关键代码及注释/*  Blink  The basic Energia example.  Turns on an LED on for one second, t......
  • hdu物联网硬件实验2 GPIO亮灯
    学院班级学号姓名日期成绩实验题目GPIO亮灯实验目的点亮三个灯闪烁频率为一秒硬件原理无关键代码及注释constintledPin1= GREEN_LED;     //thenumberoftheLEDpinconstintledPin2= YELLOW_LED;constintled......
  • 修复《Call of Duty: Black Ops III(使命召唤3)》DLL损坏问题:确保游戏体验顺畅的详尽方
    《CallofDuty:BlackOpsIII》(使命召唤:黑色行动3)是一款由Treyarch开发、动视发行的未来战争题材第一人称射击游戏,设定在2065年的近未来,玩家扮演高科技装备的超级士兵,参与紧张激烈的单人战役与多人对战,还包括标志性的丧尸模式。如果你遇到《CallofDuty:BlackOpsIII》......
  • [题解]CF1312E Array Shrinking
    思路本题为P3146变式,也算是一道很经典的区间DP题了。因为\(n\leq500\),考虑区间DP。定义\(dp_{i,j}\)表示操作\([i,j]\)区间剩余长度的最小值。那么,我们可以枚举一个中间值\(k\),可以显然地得到一个状态转移方程(即不能合二为一的情况):\[dp_{i,j}=\min(dp_{i,......
  • [题解]AT_abc342_f [ABC342F] Black Jack
    思路发现自己与庄家的操作是完全独立的,所以考虑分别计算它们。首先考虑自己的情况,定义\(dp_i\)表示掷出骰子的和为\(i\)获胜的概率,并记\(f(i)\)表示\(x=i\)时就不掷的获胜概率。对于每一步我们要么掷骰子(并且掷出的值等概率的在\(1\simD\)中),要么直接结束。两种情......
  • HDU-4281 Judges' response(2012 ACM/ICPC Asia Regional Tianjin Online)
    HDU-4281Judges'response(2012ACM/ICPCAsiaRegionalTianjinOnline)状态压缩+01背包+区间dp题意:有n个地点,第一个地点是裁判位置,其他n-1个地点是选手的位置。裁判要给选手解决问题,每个选手都有一个时间表示解决这个选手问题所需要的时间。同样的,裁判也有一个时间,表示这......
  • EOS black灵魂回响黑色无法联机/联机报错/联机失败怎么办
    灵魂回响黑色EOSblack中的职业系统,自由度非常高。从人物属性的精细调整,到装备属性的独特搭配,再到技能的个性化组合,每一步都充满了无限可能。更为惊喜的是,游戏中的角色职业不是一成不变的,而是随着手中武器的变换而灵动转变。这款游戏也是很适合叫上朋友一起玩,不过有玩家表示......
  • [题解]AT_abc264_e [ABC264E] Blackout 2
    思路一道很经典的题,运用了一种叫「时光倒流」的技巧。「时光倒流」本质上就是将所有删边(或删点)的操作,通过倒序循环求值的方式转化为加边(或加点)。「时光倒流」具体实现通常伴随着并查集出现,维护一个连通块的某种性质。首先,我们需要将所有从始至终没有删过的边加入并查集。在这......
  • [题解]AT_abc256_g [ABC256G] Black and White Stones
    思路容易看出来是个DP题,但是你发现DP的起点是不好确定的,于是假定第一条边的起点是黑色。然后你发现设为白色的贡献与黑色是相同的,于是直接令第一条边的起点是黑色,最后答案乘以\(2\)即可。然后就可以愉快的DP了。首先枚举每条边白色点的数量\(k\),定义\(dp_{i,0/1}\)......
  • Railway HDU - 3394 求调
    做个记录,如果有人愿意帮我调蒟蒻将感激不尽qwq#include<iostream>#include<iomanip>#include<cstdio>#include<vector>#include<stack>#include<queue>#include<bitset>#include<map>#include<set>#include<unorde......