[ODE100]服务器广播需要广播的服务器数量
- 人工智能
- 2025-09-06 01:33:01
![[ODE100]服务器广播需要广播的服务器数量](/0pic/pp_46.jpg)
题目
题目描述 服务器连接方式包括直接相连,间接连接。 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]服务器广播需要广播的服务器数量”
下一篇
【力扣Hot100】回溯1