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

[OD E 100] 服务器广播需要广播的服务器数量

题目

题目描述
服务器连接方式包括直接相连,间接连接。
A和B直接连接,B和C直接连接,则A和C间接连接。
直接连接和间接连接都可以发送广播。
给出一个N*N数组,代表N个服务器,
matrix[i][j] == 1,则代表i和j直接连接;不等于 1 时,代表i和j不直接连接。
matrix[i][i] == 1,即自己和自己直接连接。matrix[i][j] == matrix[j][i]。
计算初始需要给几台服务器广播, 才可以使每个服务器都收到广播。

输入描述
输入为N行,每行有N个数字,为0或1,由空格分隔,

构成N*N的数组,N的范围为 1 <= N <= 40

输出描述
输出一个数字,为需要广播的服务器的数量

示例1
输入

1 0 0
0 1 0
0 0 1

输出

3

说明

3 台服务器互不连接,所以需要分别广播这 3 台服务器

示例2
输入

1 1
1 1

输出

1

说明

2 台服务器相互连接,所以只需要广播其中一台服务器

代码

#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

void dfs(vector<vector<int>>& matr, vector<bool>& visited, int x, int n)
{

	visited[x] = true;

	for (int i = 0; i < n; i++)
	{
		if (matr[x][i] == 1 && !visited[i])
		{
			dfs(matr, visited, i, n);
		}
	}
}

int main()
{
	vector<vector<int>> matr;
	string sLine;
	while (getline(cin, sLine))
	{
		istringstream iss(sLine);
		vector<int> row;
		int val;
		while (iss >> val)
		{
			row.push_back(val);
		}
		matr.push_back(move(row));
	}

	int n = matr.size();
	vector<bool> visited(n, false);
	int ans = 0;
	for (int i = 0; i < n; i++)
	{
		if (!visited[i])
		{
			dfs(matr, visited, i, n);
			ans++;
		}
	}

	cout << ans;

	return 0;
}

http://www.kler.cn/a/552294.html

相关文章:

  • Hive Orc表数据导出和导入
  • Param ‘serviceName‘ is illegal, serviceName is blank
  • Rabbitmq的三个端口区分
  • python 的框架 dash 开发TodoList Web 应用
  • Spring Boot自动装配:约定大于配置的魔法解密
  • 组合模式详解(Java)
  • React 与 Vue 对比指南 - 上
  • 备战蓝桥杯 Day4 差分
  • 学习机器视觉halcon3D需要什么基础知识
  • 【工具类】 Hutool 中用于生成随机数的工具类
  • 【USRP】N210,X310,X410 如何优雅得接入 Vmware 虚拟机
  • Vue学习记录19
  • CPP集群聊天服务器开发实践(六):Redis发布订阅消息队列及服务器集群通信
  • JAVA过滤器(学习自用)
  • Vue.js 框架
  • 基于TCP与UDP协议的性能测试研究
  • 【AI】Pytorch基础与张量计算入门
  • C++ queue:数据结构的“排队哲学”与“先进先出法则
  • python爬虫系列课程3:解决爬虫过程中遇到的编码问题
  • Excel如何实现行分级,以及如何用Python 3实现Excel行分级