瓷砖C++

这篇博客探讨了一个在w×h的矩形广场上,小林如何从黑色瓷砖开始,仅通过相邻黑色瓷砖移动并计算能经过的黑色瓷砖数的问题。输入包括广场尺寸和颜色分布,输出为能经过的黑色瓷砖数量。博客要求使用深度优先搜索(DFS)和广度优先搜索(BFS)两种算法进行实现。
摘要由CSDN通过智能技术生成

题目描述

在一个 w×h 的矩形广场上,每一块 1×1 的地面都铺设了红色或黑色的瓷砖。

小林同学站在某一块黑色的瓷砖上,他可以从此处出发,移动到上、下、左、右四个相邻的且是黑色的瓷砖上。

现在,他想知道,通过重复上述移动所能经过的黑色瓷砖数。

输入格式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个用C++实现广度优先搜索(BFS)算法来解决该问题的代码示例: ```cpp #include <iostream> #include <vector> #include <queue> using namespace std; // 定义坐标结构体 struct Coordinate { int x; int y; Coordinate(int _x, int _y) : x(_x), y(_y) {} }; // 检查坐标是否在矩形范围内 bool isValid(int x, int y, int w, int h) { return x >= 0 && x < w && y >= 0 && y < h; } int bfs(vector<vector<char>>& grid, Coordinate start) { int w = grid.size(); int h = grid[0].size(); vector<vector<bool>> visited(w, vector<bool>(h, false)); // 记录已访问的瓷砖 int count = 0; // 经过的黑色瓷砖数 queue<Coordinate> q; // 定义广度优先搜索队列 q.push(start); while (!q.empty()) { Coordinate tile = q.front(); q.pop(); if (!visited[tile.x][tile.y]) { visited[tile.x][tile.y] = true; count++; // 检查四个相邻瓷砖 vector<Coordinate> neighbors = {{tile.x - 1, tile.y}, {tile.x + 1, tile.y}, {tile.x, tile.y - 1}, {tile.x, tile.y + 1}}; for (const auto& neighbor : neighbors) { int nx = neighbor.x; int ny = neighbor.y; if (isValid(nx, ny, w, h) && grid[nx][ny] == 'B' && !visited[nx][ny]) { q.push(neighbor); } } } } return count; } int main() { int w, h; cin >> w >> h; vector<vector<char>> grid(w, vector<char>(h)); for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { cin >> grid[i][j]; } } int start_x, start_y; cin >> start_x >> start_y; Coordinate start(start_x, start_y); int black_tiles_count = bfs(grid, start); cout << black_tiles_count << endl; return 0; } ``` 在这个示例中,我们首先输入了矩形广场的宽度w和高度h,然后输入了每个瓷砖的颜色('R'代表红色,'B'代表黑色)。接下来,我们输入了小林同学所站的黑色瓷砖的坐标。最后输出通过重复移动能够经过的黑色瓷砖数量。 希望这个示例能够帮助你理解如何用C++实现广度优先搜索算法解决该问题。如果有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值