前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OJ刷题记录:L1-108-神奇的水管(20分)

OJ刷题记录:L1-108-神奇的水管(20分)

作者头像
英雄爱吃土豆片
发布2020-10-29 11:02:51
2940
发布2020-10-29 11:02:51
举报
文章被收录于专栏:英雄爱吃土豆片

L1-108-神奇的水管(20分)

题目要求:

X星球上的水路布局所使用的水管是很特殊的, 一共有6个开口, 上,下,左,右,左上,右下. 假定我们将两个开口相连的水管认为是同一个水管, 请你编程求出X星球上的水管个数. 为了方便起见, 我们将开口表示为+号, 其他表示为-号.

输入

输入为多行数据, 第一行为一个正整数N, 表示接下来要给出的水管布局的行数. 接下来给出N行字符串, 为X星球上的水管布局.

输出

输出为一个正整数, 为X星球的总水管数.

样例输入

代码语言:javascript
复制
5
--+--
-+-+-
-+--+
-----
----+

样例输出

代码语言:javascript
复制
3

提示

输入的矩阵是n*n

解题思路:

广度优先遍历(BFS)。从起点开始搜索,搜索数组中其上下左右,左上,右下的元素的值是否为 '+',是则将其对应坐标压入队列,并且改变他的值为 '-'。直到队列为空退出搜索。

以上为一次搜索,可以在数组遍历遇到一个 '+' 时清空一条水管,并计数,继续遍历,直到数组遍历完成,输出计数结果。

通关代码:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <queue>

using namespace std;	

void checkPipe(vector<vector<char>> &matrix, int originX, int originY) {
	const int bx[] = {0, 0, -1, 1, -1, 1};
	const int by[] = {1, -1, 0, 0, -1, 1};
	int ROW = matrix.size();
	int COLUMN = matrix[0].size();
	
	matrix[originX][originY] = '-';
	
	queue<pair<int, int>> q;
	q.emplace(pair<int, int>(originX, originY));
	
	while (!q.empty()) {
		int x = q.front().first;
		int y = q.front().second;
		q.pop();
		
		for (int i = 0; i < 6; i++) {
			int nx = x + bx[i];
			int ny = y + by[i];
			
			if (nx >= 0 && nx < ROW && ny >= 0 && ny < COLUMN) {
				if (matrix[nx][ny] == '+') {
					matrix[nx][ny] = '-';
					q.emplace(pair<int, int>(nx, ny));
				}
			}
		}
	} 
}

int main() {
	int n, sum = 0;
	
	cin >> n;
	
	vector<char> arr(n);
	vector<vector<char>> matrix;
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> arr[j];
		}
		matrix.emplace_back(arr);
	}
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (matrix[i][j] == '+') {
				sum++;
				checkPipe(matrix, i, j);
			}
		}
	}
	
	cout << sum;
	
	return 0;
} 

通关截图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • L1-108-神奇的水管(20分)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档