题目描述:
本公司有很多团队,现在要将关系紧密的团队放到同一个部门。给定一个M*M的二维数组,如:
4
0 1 1 0
1 0 0 0
1 0 0 1
0 0 1 1
其中4表示二维数组的大小,1代表一个团队,上下或左右相连的1(团队)表示其关系紧密,求最后分出的部门数。
输入描述:
第一行第一个整数表示M(M<1000),
后面每一行表示团队之间的关系分布,如上所示的数阵
输出描述:
一个整数
示例:
输入:
4
0 1 1 0
1 0 0 0
1 0 0 1
0 0 1 1
输出:
3
#include <iostream>
using namespace std;
void dfs(int **a, int x, int y,int M) {
if (x < 0 || y < 0 || x >= M || y >= M || a[x][y] == 0)
return;
a[x][y] = 0;
dfs(a, x - 1, y, M);
dfs(a, x, y - 1, M);
dfs(a, x + 1, y, M);
dfs(a, x, y + 1, M);
}
int main()
{
int M;
cin >> M;
int result = 0;
int **a = new int* [M];
for (int i = 0; i < M; i++)
a[i] = new int[M];
for (int i = 0; i < M; i++) {
for (int j = 0; j < M; j++)
cin >> a[i][j];
}
for (int i = 0; i < M; i++) {
for (int j = 0; j < M; j++) {
if (a[i][j] == 1)
result++;
dfs(a, i, j, M);
}
}
cout << result << endl;
system("pause");
return 0;
}