主页 > 人工智能  > 

[ODE100]服务器广播需要广播的服务器数量

[ODE100]服务器广播需要广播的服务器数量
题目

题目描述 服务器连接方式包括直接相连,间接连接。 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; }
标签:

[ODE100]服务器广播需要广播的服务器数量由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“[ODE100]服务器广播需要广播的服务器数量